Czy jest sens wydzielić z tego kodu klasy?

Czy jest sens wydzielić z tego kodu klasy?

Wątek przeniesiony 2023-06-28 12:07 z Python przez Riddle.

lester29
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 114
0

Siemka

Mam taki kod:

Kopiuj
from menu import Menu, UserChoice, wait_menu, quit_menu, do_nothing_choice
from shop.shop import Shop

def list_products(shop: Shop):
    if shop.available_products:
        print("Available products:")
        for idx, product in enumerate(shop.available_products):
            print(f"{idx}) {product.name}")
    else:
        print("No such any products")
    wait_menu()

def add_product(shop: Shop):
    # TODO: add_product functionality    passdef search_products(shop: Shop): passdef remove_prpoduct(shop: Shop): passdef main() -> None:
    shop = Shop()
    main_menu = Menu('Main menu', items=(
        UserChoice('Product list', lambda: list_products(shop)),
        UserChoice('Shopping cart', do_nothing_choice),
        UserChoice('Your orders', do_nothing_choice),
        UserChoice('Quit', quit_menu)
    ))
    main_menu.loop()

if __name__ == '__main__':
    main()

Czy jest sens zrobić z funkcji add_product(), search_products() itd. osobną klasę o nazwie ShopUI?

Sorry za lamerskie pytanie ale dopiero się uczę

veneficus
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 399
1

Tak

Z4
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 32
0

Nie ma ograniczeń. Możesz niemal z dowolnej linii napisanego kodu właściwie zrobić osobną klasę, czego przykładem są implementacje fizzbuzz w wydaniu enterprise.

Podzieliłeś kod na warstwy - czy dobrze? Myślę, że nie i przyjmuje, że użycie klas w tym przypadku to po prostu forma, która ma przykryć brudy pod dywanem.

Podział na warstwy ma sens, gdy górna warstwa bardzo często się zmienia, a dolna warstwa niemal wcale. U Ciebie sądzę, że te warstwy są sprzężone i jak jedna się zmieni to druga wraz z nią. W efekcie zamiast poprawiać kod w jednym miejscu, będziesz musiał robić to w kilku. Temat warstw poruszyłem również w tym wątku: https://4programmers.net/Forum/Inzynieria_oprogramowania/368541-co_backend_ma_zwracac_na_frontent?p=1912963#id1912963

Riddle
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10230
0
lester29 napisał(a):

Siemka

Mam taki kod:

[...]

Czy jest sens zrobić z funkcji add_product, search_products itd. osobną klasę o nazwie ShopUI?

Sorry za lamerskie pytanie ale dopiero się uczę

Szczerze mówiąc, nie specjalnie.

Jeśli to jest finalny kod, to moim zdaniem lepiej go zostawić tak jak jest. Dzielić na klasy mógłbyś zacząć, jeśli ten program miałby się rozrastać. Poza tym, tutaj właściwie nie ma Twojej logiki, to są użycia tej biblioteki menu, więc nie ma tu potrzeby na dodatkowe warstwy.

Jeśli kodu jest więcej, to go pokaż, pomyślimy wtedy.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.