2010-12-29 86 views
9

Jestem programistą ASP.NET MVC, zaczynając od mojego pierwszego dużego projektu na szynach, ale czy jestem zdezorientowany, gdzie umieścić swoją logikę biznesową? na ASP.NET tworzę bibliotekę, która zawiera usługi (projektowanie oparte na domenie), które obsługują logikę biznesową, słyszałem, że szyny używają koncepcji chudego kontrolera modelu tłuszczu, ale mam kilka projektów w ASP.NET, które dodają całą logikę do kontroler spowodowałby wielki bałagan, czy jest jakiś inny sposób?Skąd logika biznesowa idzie w szynach?

+1

co masz na myśli przez "logikę biznesową"? – sethvargo

+0

możesz także spróbować tworzyć moduły i umieszczać je w swoim katalogu lib – stephenmurdoch

Odpowiedz

12

Przejdź do koncepcji FatModels i SkinnyControllers. Twoje modele powinny wiedzieć, jak się zachowują i co powinny robić.

Gdy modele stają się zbyt grube, wyodrębnij je do modułów, które można ponownie wymieniać i dołącz je do modułu.

można łatwo przetestować zachowanie modeli wykorzystujących rspec (lub test/unit lub shoulda). Następnie możesz przetestować, czy aplikacja zachowuje się poprawnie przy użyciu ogórka.

+3

Czytelnicy Hi Future! Powyższe ma sens, ale raczej, że nadal buduj swój model, sprawdź http://blog.codeclimate.com/blog/2012/10/17/7-ways-to-decompose-fat-activerecord-models/ –

+0

I znaleźć bardzo obiecujący https://github.com/orgsync/active_interaction. –

1

Możesz umieścić logikę biznesową w dowolnym miejscu (nawet w widokach !, ale to zły pomysł).

Powiedziałbym, że jeśli logika jest powiązana z obiektem świata rzeczywistego, to umieść go na modelu. W przeciwnym razie użyj kontrolera. Ale od Ciebie zależy, jak to zrobić w swojej aplikacji. Modele służą do modelowania rzeczy, a kontrolery do kontrolowania rzeczy.

5

"Business Logic" lub niektórzy mogą to nazwać "Domain Logic" nie należy nigdzie w pobliżu Rails i/lub twojego projektu .NET MVC. Railsy i MVC powinny zależeć od twojej domeny, a nie odwrotnie. Polecam lekturę "Onion Architecture" autorstwa Jeffery Palermo lub obejrzenie "Architecture the Lost Years" Roberta Martina. (Myślę, że to i tak rozmowa). Prawdopodobnie istnieje więcej zasobów niż to, ale później podziękujesz sobie, że traktujesz zarówno Railsy, ​​jak i .NET MVC, takie jak struktury stron trzecich, a nie główny dom twojej aplikacji.

+5

Widziałem tę rozmowę i wielokrotnie słyszałem ten pomysł, ale nigdy nie widziałem konkretnego przykładu lub demonstracji, jak to osiągnąć. jako nowicjusz ma z zasady sens, ale nie potrafię sobie wyobrazić, jak to urzeczywistnić. czy masz przykład aplikacji szyny, która podąża za tą praktyką, na którą mógłbym spojrzeć, lub artykułu z bardziej konkretnym przykładem? –

2

Myślę, że ten artykuł napisany zapewnia dobry przegląd strategii włączania domeny Driven Design ze w ramach poręcze: http://www.smashingboxes.com/domain-logic-in-rails/

TL; DR

byłaby swoich klasycznych modeli szyn w repozytoriach, i używać warstwa elewacji w kontrolerach do interakcji z Twoim modelem domeny.

Sam się z tym zmagam i wydaje mi się, że wszystko, co jest "grube" w oprogramowaniu, wydaje się zapachem, naruszającym jedną odpowiedzialność.