C# 模型类可以包含方法和构造函数吗

C# 模型类可以包含方法和构造函数吗,c#,C#,Q:`模型类可以包含方法和构造函数吗?“[最佳实践] 我有一个employee模型类,它由员工的姓名、年龄、工资等组成 public class Employee { public string Name { get; set; } public int Age { get; set; } public int Salary { get; set; } } 因此,上面的模型类是否可以包含一些自我更新方法(比如每1小时用计时器或其他东西更新一次员工的年龄)和/或构造函数,

Q:`模型类可以包含方法和构造函数吗?“[最佳实践]

我有一个employee模型类,它由员工的姓名、年龄、工资等组成

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小时用计时器或其他东西更新员工年龄”的要求

在我的书中,这是一个禁忌:)。模型的用途应该仅限于数据存储。定期更新信息是一个纯粹的业务逻辑操作