Куда девается бизнес-логика в rails?

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

4 ответов


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

когда ваши модели получают слишком тучными, извлеките их вне в re-usuable модули и включите их в вашем модуле.

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


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


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

TL; DR

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

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


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

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