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

Czy jest sens wydzielić z tego kodu klasy?

0

Siemka

Mam taki kod:

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ę

1

Tak

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: Co backend ma zwracać na frontent

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1