在上周的工作中,我们举行了一次会议/演讲,讨论了重新思考我们如何做 MVC,基于我们老板可能进行的大量研究以及对其他 SO 问题的一些阅读。对我来说,一个收获是,当人们说“将逻辑与数据分离”时,我可能更准确地说“将逻辑与数据源分离”。如果你做第一个,你可能会成为贫血域模型的牺牲品。我在这方面是正确的吗?
其次,我们了解到 MVC 不会在任何地方包含您的业务逻辑。这应该位于 Web 应用程序之外的单独服务层或 BLL 中。协调这两点似乎有点棘手 - 是否按照基本 OOP 原则的要求,特定逻辑与数据对象一起使用,还是在单独的层中?
这是我现在需要帮助的一个具体示例。我非常确信这将属于服务层,但我还有其他问题。假设我有一些行为将多个不同类型的不同实体作为输入。它运行,然后作为输出,它可以修改输入实体,并生成新实体作为记录。在我的情况下,它是为了游戏,但你可以说它就像一个交易。涉及多人,一些产品,并生成了收据。
- 一个简单的问题,你会把这个逻辑放在哪里?它是一个被实例化的单独的类吗?
- 难题(对我而言)是谁负责调用此代码?让控制器这样做会感觉不对。或者这正是它的工作?如果它不在任何一个特定页面上运行,而是在用户在特定时间后访问该站点时运行怎么办?基础控制器?
- 一般来说,您如何在“这属于我的实体类,因此它不仅仅是一堆 getter 和 setter”和“这属于我的服务层”之间做出决定?还是我把事情搞混了……实体类是否属于服务层?