C# 模型类可以包含方法和构造函数吗
Q:`模型类可以包含方法和构造函数吗?“[最佳实践] 我有一个employee模型类,它由员工的姓名、年龄、工资等组成C# 模型类可以包含方法和构造函数吗,c#,C#,Q:`模型类可以包含方法和构造函数吗?“[最佳实践] 我有一个employee模型类,它由员工的姓名、年龄、工资等组成 public class Employee { public string Name { get; set; } public int Age { get; set; } public int Salary { get; set; } } 因此,上面的模型类是否可以包含一些自我更新方法(比如每1小时用计时器或其他东西更新一次员工的年龄)和/或构造函数,
public class Employee
{
public string Name { get; set; }
public int Age { get; set; }
public int Salary { get; set; }
}
因此,上面的
模型类是否可以包含一些自我更新方法(比如每1小时用计时器或其他东西更新一次员工的年龄)和/或构造函数,或者最好从执行器处理所有这些事情?这一切都取决于类的使用方式
语言中没有任何东西不允许这样做,但这取决于您使用的框架以及如何使用代码中的类,以及将不同的功能放在何处
对于每种情况都没有最好的答案。为什么不能呢?真正的答案是:这取决于您的用例。模式,例如某个模型类,是建议、常见的做事方式,而不是牢不可破的教条
注:示例“使用计时器或其他工具每1小时更新一次员工的年龄”基本上是错误的。存储年龄基本上是错误的,除非您将snapshop存储到某个时刻。更好的解决方案是存储出生日期并计算年龄。例如,通过仅使用getter定义age
属性。模型应包含与模型相关的所有逻辑(这是DSL)是的,它可以每小时更新一次。当你定义自动属性时,它和定义setter和getter一样,所以你当然可以添加方法和构造函数。让我把我的2美分放在这里
我将从这一点开始:这可能是危险的
在模型中添加简单的CRUD类方法并没有什么错,但是……它淡化了模型和业务逻辑之间的隔离层
我曾多次目睹这些方法随着时间的推移而得到“增强”,并在某个时候以不符合模型目的的逻辑结束。结果是:您的“模型”和“控制器”之间存在硬依赖关系
这并不是说这是错误的,而是它打开了一些人可以滥用的“门户”
如果你想要有一个更严格的体系结构,你可以考虑把你的操作添加到一个“管理者类”类:
Car {
string type;
int price;
}
CarManager {
public CarManager(Car car) {...}
public ChangePrice(...) {...}
public ChangeType(...) {...}
}
…manager类现在可以应用验证、异常处理、日志记录等,而不用担心它会违反您的体系结构
结论:
- 是,您可以在模型中添加简单的CRUD操作
- 关注:注意它们的用法
编辑:
遗漏了“每1小时用计时器或其他东西更新员工年龄”的要求
在我的书中,这是一个禁忌:)。模型的用途应该仅限于数据存储。定期更新信息是一个纯粹的业务逻辑操作