如何利用DTO,域模型,值对象,

时间:2019-04-11 20:28:24

标签: c# architecture poco dto domain-object

我正在用c#设计调度程序的不同层。这将是在没有GUI的情况下在后台运行的服务。

这是我的体系结构基线(当然,这只是结构的一小段代码。

1

就建筑学而言,我不确定“最佳实践”。我一直在阅读POCO,值对象,DTO,领域模型,据我所知,下面介绍的是错误的DTO方法。

在我的课程“ ScheduleDTP”中,我有几种方法进行一些相对复杂的操作,其中日期来自数据库。 CalculatePriority是其中一种方法的简化示例

数据库属性: ID,名称,频率,LastRun

操纵的属性: 优先级

工作经理的目的是评估所有计划和按需计划。

据我了解,DTO应该只包含数据,并在不同层之间传输数据。我也认为,这也不应该是JobManagers的职责。

public class ScheduleDTO
{
    public Guid ID { get; set; }
    public string Name { get; set; }
    public int Frequency { get; set; }
    public DateTime LastRun { get; set; }

    //Calculation based on the values above
    public double Priority
    {
        get
        {
            return CalculatePriority();
        }
    }

    public double CalculatePriority()
    {
        return (DateTime.Now - LastRun.AddSeconds(Frequency)).TotalSeconds / 100;
    }
}

我是否应该创建一些不同类型的对象,即POCO,Domail模型……来操纵DTO中的数据?

我非常感谢有关如何构造不同图层的任何帮助,或者可以引导我朝正确方向前进的东西

1 个答案:

答案 0 :(得分:0)

通常由服务层(又称业务逻辑层,BLL等)处理。服务层的工作是保持核心业务逻辑。关于是否应使用此层,或者是否应将其集成到域对象中,一直存在一个长期的争论。 See this post for more details并进行一些有关贫血领域模型和交易脚本的搜索。

通常,当我看到称为“ Manager”的任何内容时,我会立即将其标记为仔细检查。这可能违反了Single Responsibility Principal周围的规则。最后创建“上帝对象”,这通常是非常危险的反模式。