5

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

我有一个员工模型类,其中包含员工的姓名、年龄、薪水等......

public class Employee
{
    public string Name { get; set; }
    public int Age { get; set; }
    public int Salary { get; set; }
}

那么上面是否可以Model Class包含一些自我更新方法[比如用计时器或其他东西每1小时更新一次员工的年龄]和\或构造函数,还是最好从执行者处理所有这些事情?

4

4 回答 4

5

为什么他们不能?真正的答案是:这取决于您的用例。模式,例如作为模型类的东西,是建议,是常见的做事方式,而不是牢不可破的教条。

注意:“使用计时器或其他东西每 1 小时更新一次员工的年龄”的示例从根本上是错误的。存储年龄从根本上说是错误的,除非您将 snapshop 存储到某个时刻。更好的解决方案是存储出生日期并计算年龄。例如,通过Age仅使用 getter 定义属性。

于 2013-11-04T23:19:43.647 回答
4

模型应该包含与模型相关的所有逻辑(这是 DSL),是的,它可以每小时更新一次。当你定义自动属性时,它与定义 setter 和 getter 相同,所以当然你也可以添加方法和构造函数。

于 2013-11-04T23:20:05.193 回答
1

让我把我的 2 美分放在这里。

我将从这个开始:这可能很危险

在模型中添加简单的类似 CRUD 的方法并没有错,但是……它会减少模型和业务逻辑之间的分离层。

我已经多次目睹这些方法随着时间的推移而“增强”,并且在某些时候以不符合模型目的的逻辑结束。结果:你的“模型”和“控制器”之间的硬依赖。

并不是说它是错误的,而是它打开了有人可以滥用的“门户”。

如果您想拥有更严格的架构,您可以考虑将您的操作添加到“类似管理器”的类中:

    Car {
       string type;
       int price;
    }

    CarManager {
       public CarManager(Car car) {...}

       public ChangePrice(...) {...}
       public ChangeType(...) {...}
    }

...管理器类现在可以应用验证、异常处理、日志记录等,而不必担心它会违反您的体系结构。

结论:

  • 的,您可以在模型中添加简单的 CRUD 操作。
  • 关注:注意它们的用法。

编辑:

错过了“用计时器或其他东西每1小时更新一次员工的年龄”的要求。

在我的书中,这是不可以的:)。该模型的目的应仅限于数据存储。定期更新信息是纯业务逻辑操作。

于 2020-05-10T07:19:44.010 回答
0

这完全取决于类的使用方式。

语言中没有什么是不允许的。但是取决于您使用的框架以及您在代码中使用类的方式,以及将不同的功能放在哪里。

没有针对每种情况的最佳答案。

于 2013-11-04T23:19:25.353 回答