2010-10-08 27 views
5

moim problemem jest to, że staramy się korzystać ze środowiska MVC (PHP). Po wielu dyskusjach uważam, że MVC jest bardzo dobre, ale brakuje mi możliwości napisania logiki wielokrotnego użytku - aplikacji. Nie jestem więc pewien, czy mamy odpowiednie podejście do wdrażania naszego oprogramowania w środowisku MVC.Jak pisać logikę biznesową wielokrotnego użytku w modelach MVC?

Najpierw opiszę podejście inne niż MVC, oo, którego obecnie używamy.

Na przykład - pracujemy nad niektórymi grami przeglądarkowymi (tak, to jest nasz zawód). Wyobraź sobie, że mamy obiekt gracza. Bardzo często korzystamy z tego obiektu gracza. Mamy kilka różnych stron, na których możesz kupować myśli, więc musisz wykonać transakcje "pieniężne" na "koncie bankowym" graczy lub wyobrazić sobie, że możesz walczyć z innymi graczami. Mamy kilka scenariuszy walki, a te skrypty zabierają 2 lub więcej obiektów gracza (zależy to od rodzaju bitwy tj. Bitwy klanów, bitwy pomiędzy graczami ...).

Mamy więc kilka stron (i kontrolerów) o różnej logice bitwy. Ale każdy z tych kontrolerów używa obiektu gracza, aby obliczyć wszystkie atrybuty i przedmioty, które gracz posiada oraz jakie obrażenia i obrażenia wykona gracz.

więc, w jaki sposób możemy ponownie użyć logiki w obiekcie gracza w przypadku modelu MVC? źle byłoby powielić całą niezbędną logikę w różnych kontrolerach walki i modelach.

Myślę, że "transakcja za złoto" - logika byłaby dobrym przykładem, aby dać ci więcej szczegółów. potrzebujesz funkcji transakcyjnej w przypadku walki, jeśli wygrasz z innym graczem i zrabujesz część jego złota, potrzebujesz funkcji transakcyjnej w przypadku zakupu niektórych rzeczy i potrzebujesz funkcji transakcyjnej w przypadku wydawania złota do gildii graczy ...

Powiedziałbym, że byłoby złym podejściem do zdefiniowania wszystkich tych funkcji w jednym modelu gracza! Mogę powiedzieć, że ten model gracza byłby bardzo duży (w rzeczywistości mamy problem, że nasza klasa graczy jest naprawdę ogromna - jego klasa godna)

myślisz, że istnieje rozwiązanie w stylu MVC dla tego problemu?

Odpowiedz

1

Powiedziałbym, że umieszczasz kod tam, gdzie ma to największy sens, i gdzie nie musisz go duplikować gdzie indziej.

Jeśli istnieje pewna operacja, która zawsze wymaga obiektu Player, ale może być używana w różnych kontrolerach, klasa Player będzie logicznym miejscem do jej umieszczenia. Z drugiej strony, jeśli tylko odrobina logiki musi być wykonana w kontekście określonego kontrolera i dotyczy potencjalnie innych klas, być może powinna być w kontrolerze - lub może w innej klasie.

Jeśli masz problemy z ustaleniem, gdzie powinna iść logika, być może dzieje się tak dlatego, że twoje funkcje nie są ziarniste i nadają się do ponownego użycia. Istnieją pewne aspekty MVC, które zmuszają cię do zastanowienia się nieco nad rozdzieleniem obaw i utrzymaniem rzeczy bardziej SUCHOWYCH niż zwykłym podejściem do OOP ... abyś mógł skończyć rozbicie obecnie zakodowanych operacji, które są w jednym Funkcjonuj teraz w wielu funkcjach na różnych klasach, aby uzyskać właściwy kod we właściwych miejscach.

Na przykład - i to wcale nie są konkretne sugestie, ale tylko przypadkowy proces myślowy - może proces przekazywania "złota" pomiędzy graczami musi zostać podzielony na bardziej szczegółowe procesy. Klasa gracza może wykonać podstawowe zadanie zmiany równowagi, ale wtedy kontroler (-y) może wykonać określone części procesu, takie jak weryfikacja do/od kogo złoto jest przesyłane i dlaczego.

Powiązane problemy