Q :`模型类可以包含方法和构造函数吗?" [BEST PRACTICE]
我有一个员工模型类,其中包括员工的姓名,年龄,工资等......
public class Employee
{
public string Name { get; set; }
public int Age { get; set; }
public int Salary { get; set; }
}
以上Model Class
也可以包含一些自我更新方法 [比如使用计时器或其他东西每1小时更新一次员工的年龄] 和\或构造函数,或者它是更好地处理来自执行者的所有事情?
答案 0 :(得分:5)
他们为什么不能?真正的答案是:这取决于您的用例。模式,例如某些模型类,是推荐,常见的做事方式,而不是牢不可破的教条。
注意:“使用计时器或其他东西每1小时更新一次员工年龄”的示例从根本上说是错误的。存储年龄根本就是错误的,除非您在某个时刻存储快餐店。一个更好的解决方案是存储出生日期,并计算年龄。例如,通过仅使用getter定义Age
属性。
答案 1 :(得分:4)
模型应包含与模型相关的所有逻辑(这是DSL),是的,它可以每小时更新一次。当你定义自动属性时,它与定义setter和getter一样,所以当然你也可以添加方法和构造函数。
答案 2 :(得分:1)
让我把2美分放在这里。
我将从此开始:这很危险
在模型中添加简单的类似于CRUD的方法并没有什么问题,但是...它缩小了模型与业务逻辑之间的隔离层。
我已经多次目睹这些方法随着时间的流逝而得到“增强”,并在某些时候出现了不符合模型目的的逻辑。结果是:您的“模型”与“控制器”之间存在硬依赖性。
并不是说错了,而是打开了某些人可以滥用的“门户”。
如果您想拥有更严格的体系结构,可以考虑将操作添加到“类似于Manager”的类中:
Car {
string type;
int price;
}
CarManager {
public CarManager(Car car) {...}
public ChangePrice(...) {...}
public ChangeType(...) {...}
}
... manager类现在可以应用验证,异常处理,日志记录等,而不必担心会违反您的体系结构。
结论:
编辑:
缺少一个要求,即“ 每1个小时使用计时器或其他东西更新员工的年龄”。
在我的书中,这是一个否定:)。该模型的目的应仅限于数据存储。定期更新信息是纯业务逻辑操作。
答案 3 :(得分:0)
这完全取决于课程的使用方式。
语言中没有任何内容不允许它。但是,取决于您使用的框架以及如何使用代码中的类来放置不同功能的位置。
每种情况都没有最佳答案。