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?
Antwort
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.
- Example of taking a fat controller (with logic) and moving to a model
- Example of taking code from the views and moving into the model
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.
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/ –
I finden Sie https://github.com/orgsync/active_interaction sehr vielversprechend. –
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.
"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.
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? –
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.
- 1. Wohin mit Geschäftslogik in knockout.js?
- 2. Wohin geht java stderr?
- 3. Wohin geht diese Funktionalität?
- 4. Wohin geht GOTO: EOF?
- 5. Autoconf - Wohin geht config.h?
- 6. NSString Wohin geht der Zeilenumbruch
- 7. Docker, wohin geht die Firewall?
- 8. MVVM in Silverlight - Wohin geht die asynchrone Servicelogik?
- 9. Ausnahmebehandlung in PHP: Wohin geht $ e?
- 10. Wohin geht CELERYBEAT_SCHEDULE in Ihrem Projekt?
- 11. Wohin geht der Initialisierungscode für große Kolbenanwendungen?
- 12. Wohin geht local.properties für Android-Projekt?
- 13. Beim Debuggen unter Windows wohin geht stderr?
- 14. Wohin geht Console.Out.Write() für einen Windows-Dienst?
- 15. ProtectSection mit RsaProtectedConfigurationProvider Wohin geht der Schlüssel?
- 16. Wohin geht mein eingebetteter Python-Standard?
- 17. ASP.NET MVC - Wohin geht die Authentifizierungsschicht?
- 18. Wohin geht ein OpenSearch OSDD-Dokument?
- 19. Wohin geht die Start-Job-Ausgabe?
- 20. Wohin geht VISA auf dem OSI-Stack?
- 21. Wohin geht eine Java Web Start-Anwendung?
- 22. Wohin geht die Ausgabe von console.writeline in einem Webservice?
- 23. WPF Image Control, Quelleigenschaft, Wohin geht die Browserschaltfläche in VS2013?
- 24. Wohin geht der Rails-Initialisierer in einem Edelstein?
- 25. Wohin geht der Text in einer geworfenen Ausnahme?
- 26. Wohin geht der plugins-Befehl in Gradle-Dateien?
- 27. Wohin geht <customErrors> in web.config für MVC-Anwendungen?
- 28. Wohin geht mein CRUD LINQ Code? ASP.NET MVC
- 29. Wie finde ich heraus, wohin mein Gedächtnis geht?
- 30. Wohin geht die Echoausgabe, wenn ein Bash-Skript ausgeführt wird?
Was meinen Sie mit "Business-Logik"? – sethvargo
Sie können auch versuchen, Module zu erstellen und sie in Ihrem Lib-Verzeichnis – stephenmurdoch