2010-12-29 11 views
9

Ich bin ein ASP.NET MVC Entwickler gerade mit meinem ersten großen Projekt auf Schienen, aber ich bin verwirrt, wo Sie Ihre Geschäftslogik setzen? auf ASP.NET Ich erstelle eine Bibliothek, die Dienste (Domain Driven Design) enthält, die Geschäftslogik behandeln, ich habe gehört, dass Rails ein Konzept von fetten Modell Skinny Controller verwendet, aber ich habe einige Projekte in ASP.NET, die alle die Logik hinzufügen Controller würde ein großes Chaos schaffen, gibt es einen anderen Weg?Wohin geht Geschäftslogik in Schienen?

+1

Was meinen Sie mit "Business-Logik"? – sethvargo

+0

Sie können auch versuchen, Module zu erstellen und sie in Ihrem Lib-Verzeichnis – stephenmurdoch

Antwort

12

Gehen Sie mit dem Konzept der FatModels und SkinnyControllers. Ihre Modelle sollten wissen, wie sie sich verhalten und was sie tun sollten.

Wenn Ihre Modelle zu fett werden, extrahieren Sie sie in wiederverwendbare Module und fügen Sie sie in Ihr Modul ein.

Sie können ganz einfach Verhalten von Modellen testen RSpec (oder Test/Einheit oder shoulda). Dann können Sie testen, ob sich die Anwendung mit Gurke richtig verhält.

+3

Hi Future Leser! Das oben genannte macht Sinn, aber eher, dass Sie Ihr Modell mästen, überprüfen Sie http://blog.codeclimate.com/blog/2012/10/17/7-ways-to-decompose-fat-activerecord-models/ –

+0

I finden Sie https://github.com/orgsync/active_interaction sehr vielversprechend. –

1

Sie können Geschäftslogik beliebig platzieren (auch in Ansichten! Obwohl das eine schlechte Idee ist).

Ich würde sagen, wenn die Logik an ein reales Objekt gebunden ist, dann lege es auf das Modell. Andernfalls verwenden Sie den Controller. Aber es liegt an Ihnen zu bestimmen, wie Sie es für Ihre App tun. Modelle sind zum Modellieren von Dingen und Controller sind zum Steuern von Dingen.

5

"Business Logic" oder einige nennen es "Domain Logic" gehört nicht in der Nähe von Rails und/oder Ihrem .NET MVC-Projekt. Rails und MVC sollten von Ihrer Domain abhängen und nicht umgekehrt. Ich würde empfehlen, die Zwiebelarchitektur von Jeffery Palermo zu lesen oder "Architecture the Lost Years" von Robert Martin anzuschauen. (Ich denke, das ist das Gespräch sowieso). Es gibt wahrscheinlich mehr Ressourcen als das, aber Sie werden sich später selbst dafür bedanken, Rails und .NET MVC wie die 3rd-Party-Frameworks zu behandeln, die sie sind, und nicht das Haupthaus Ihrer Anwendung.

+5

Ich habe das Gespräch gesehen und habe diese Idee schon oft gehört, aber ich habe noch nie ein konkretes Beispiel oder eine Demonstration gesehen, wie man das erreichen kann. als Neuling macht es prinzipiell Sinn, aber ich kann nicht wirklich entwerfen, wie man das in die Praxis bringt. hast du ein beispiel für eine rails app, die dieser Praxis folgt, die ich mir ansehen könnte, oder einen Artikel mit einem konkreteren Beispiel? –

2

Ich denke, das Blog-Artikel einen guten Überblick über eine Strategie der Einbeziehung Domain Driven Design mit in den Schienen-Framework bietet: http://www.smashingboxes.com/domain-logic-in-rails/

TL; DR

Refaktorieren klassischen Schienen Modelle in Repositories, und ein verwenden Fassadenschicht in den Controllern, um mit Ihrem Domänenmodell zu interagieren.

Ich kämpfe mit diesem ein wenig mein Selbst, und so viel wie das Fett-Controller-Muster scheint vorherrschen, scheint alles "Fett" in Software ein Geruch zu sein, Verletzung der alleinigen Verantwortung.

Verwandte Themen