Witam mam pewien problem który nie wiem za bardzo jak ugryźć.Z góry proszę o nie czepianie się pseudokodu oraz nazewnictwa, po prostu piszę skrótami. Do rzeczy:
Powiedzmy że mam 5 klas:
Client - klient
WarehouseEmp - pracownik magazynu
BiuroEmp - pracownik biurowy
Manager
Administrator
Każda z tych klas ma inne uprawnienia (czyli metody/funkcje) - przykładowo:
Klient - edycja profilu, przeglądanie produktów, robienie zakupów
Pracownik magazynu - to samo co klient + kontrola stanów magazynów(kontrola ilości istniejących produktów)
Pracownik biurowy - to samo co pracownik magazynu + dodawanie/zarządzanie nowymi typami produktów
Manager - to samo co wyżej + wyznacznie zadań pracownikom różnego szczebla, więcej uprawnień kontroli produktów i zarządzania nimi
Administrator - to samo co wyżej + kontrola kont - tylko admin może dodawać/usuwać/edytować konta pracownicze.
Jeśli chodzi o klasy pracownicze to nie mam problemów z uproszczeniem kodu - korzystam z dziedziczenia oraz metod/klas generycznych.
Mam natomiast problem z metodami - ponieważ dla każdego typu usera(klasy) musiałbym napisać osobną funkcję sterującą lub napisać wszystko w jednej funcki lecz z warunkami:
Pseudokod:
public void mainMenu(){
switch(userType)
{
case Client:{
// petla while + wybor jednej z poniższej opcji
editProfile();
showProducts();
.
.
.
}
case WarehouseEmp: {
//petla while + wybór jednej z poniższej opcji
editProfile();
showProducts();
addProduct();
editProduct();
deleteProduct();
}
case BiuroEmp{
////petla while + wybór jednej z poniższej opcji
editProfile();
showProducts();
addProduct();
editProduct();
deleteProduct();
ManageNewProducts();
}
.//i
.//tak
.//dalej
Jak widać znaczna część kodu się powtarza a teraz załóżmy, że nie mamy 5 klas tylko 500 tak więc potrzebuję pomysłu jak to uprościć? Dla jednej klasy wygodnie było mi użyć enum jako funkcji wewnętrznej aczkolwiek jako że enum nie ma możliwości dziedziczenia odpada. Tak samo typy generyczne. Czy da się to jakoś uprościć aby nie kopiować kodu w każdym casie?