Куда идет бизнес-логика в рельсах? - PullRequest
11 голосов
/ 30 декабря 2010

Я - разработчик ASP.NET MVC, только начинающий свой первый большой проект на рельсах, но я не совсем понимаю, куда поместить вашу бизнес-логику?В ASP.NET я создаю библиотеку, которая содержит сервисы (доменный дизайн), которые обрабатывают бизнес-логику. Я слышал, что rails использует концепцию скинового контроллера с толстой моделью, но у меня есть несколько проектов в ASP.NET, которые добавляют всю логикуконтроллер может создать большой беспорядок, есть ли другой способ?

Ответы [ 4 ]

13 голосов
/ 30 декабря 2010

Следуйте концепции FatModels и SkinnyControllers.Ваши модели должны знать, как они себя ведут и что они должны делать.

Когда ваши модели становятся слишком толстыми, извлеките их в повторно используемые модули и включите их в свой модуль.

Вы можете легко протестировать поведение моделей с помощью RSpec(или тест / блок или должен).Затем вы можете проверить правильность работы приложения, используя Cucumber.

7 голосов
/ 08 марта 2013

«Бизнес-логика», или кто-то может назвать ее «Доменная логика», не относится к Rails и / или вашему проекту .NET MVC.Rails и MVC должны зависеть от вашего домена, а не наоборот.Я бы порекомендовал почитать «Луковую архитектуру» Джеффри Палермо или посмотреть «Архитектура потерянных лет» Роберта Мартина.(Я думаю, что это все равно говорить).Вероятно, ресурсов больше, чем это, но позже вы поблагодарите себя за то, что относитесь и к Rails, и к .NET MVC, как к сторонним фреймворкам, а не к основному домику вашего приложения.

3 голосов
/ 18 декабря 2013

Я думаю, что в этой статье блога представлен хороший обзор стратегии включения доменного дизайна в структуру rails: http://www.smashingboxes.com/domain-logic-in-rails/

TL; DR

Рефакторинг ваших классических моделей rails врепозитории и используйте фасадный слой в контроллерах для взаимодействия с моделью вашего домена.

Я немного борюсь с этим, и, несмотря на то, что модель Fat Controller, кажется, преобладает, все "жирное" в программном обеспечении кажется запахом, нарушающим единственную ответственность.

0 голосов
/ 30 декабря 2010

Вы можете разместить бизнес-логику в любом месте (даже в представлениях! Хотя это плохая идея).

Я бы сказал, если логика привязана к реальному объекту, то поместил бы ее в модель. В противном случае используйте контроллер. Но вам решать, как это сделать для вашего приложения. Модели предназначены для моделирования вещей, а контроллеры - для управления вещами.

...