2011-03-17 58 views
1

我正在构建一个MVC应用程序,它比我通常做的要复杂一点,我想尝试一个新的类结构。基本上这些阅读很多。只有5-10%的操作将针对数据库进行插入/更新。这个类的结构方法是正确的还是可用的? (MVC/C#)

因此,我正在考虑创建将从数据库层返回的基类DTO类。然后,业务对象将继承DTO类,以扩展具有所有验证和业务规则的基本结构。

例子:

namespace Project.DTO 
{ 
    public class Employee 
    { 
     public string Name; 
     public string Surname; 
     ... 
    } 
} 

namespace Project 
{ 
    public class Employee : Project.DTO.Employee 
    { 
     public bool IsValid() 
     { 
     ... 
     } 
    } 
} 

这是一个好办法?我还没有想到的是如何在MVC内部使用它们,因为“正确”的方式是实现模型类。我相信我可以创建从DTO对象继承的模型类......但我不确定。

我还需要一种方法来处理所有具有某种接口的验证函数,以避免在GUI上重复使用很多通用代码。

在此先感谢!

回答

1

我可能会使用完全不同的方法。我的主要想法是这些:

  • 我想在类之间松耦合,所以我不会有我的模型类继承我的DTO对象
  • 我可能不会包括在我的模型类
  • 验证逻辑

这将导致以下结构入手:

namespace Project.DTO 
{ 
    public class Employee 
    { 
     public string Name; 
     public string Surname; 
     ... 
    } 
} 

namespace Project 
{ 
    public class Employee 
    { 
     public string Name { get; set; } 
     public string Surname { get; set; } 
    } 
} 

当谈到验证逻辑,我会做的第一个接口Ë验证逻辑,即注入Emplyee类:

public interface IValidator<T> 
{ 
    bool IsValid(T objectToInspect); 
} 
public class Employee 
{ 
    private readonly IValidator<Employee> validator; 
    public Employee(IValidator<Employee> validator) 
    { 
     this.validator = validator; 
    } 

    public string Name { get; set; } 
    public string Surname { get; set; } 

    public bool IsValid() 
    { 
     return validator.IsValid(this); 
    } 
} 

这打开了你的设计,全范围的功能,包括使用IoC容器和测试更好的支持。

+0

Intreseting,我正面临类似的问题。您的回复帮助了我很多 – vondip 2011-03-18 14:19:26

+0

界面选项是我过去所做的,并且运行良好。但是对于松散耦合,Business类将至少具有DTO对象的相同属性,所以通过定义所有字段两次,我相信您将走上漫长的道路。 – DaniH 2011-03-18 14:23:26

+0

@DaniH:这不一定是因为业务类具有DTO的所有属性。您可能会很好地为某些用途使用较少的属性的业务类,或者甚至可能有一个DTO分为几个不同的业务类的情况。 – 2011-03-18 14:31:40

1

如果验证必须检查参数必须来自数据库的规则,该怎么办?您的实体无法获得该参数的知识和方式。

创建模型/ ViewModel是好的,但验证通常需要更复杂的逻辑,这将保证专用类 - 所以我通常不会实现IsValid在我的实体上。

但是,您可以使用System.Component.DataAnnotation验证属性来对照实体的简单属性。

+0

我想到的是,从DTO继承的Employee类是具有验证例程的那个类,如果需要,它将包括对数据库的检查。 关于DataAnnotation,如果它们不在继承自Controller类的类中,它们会工作吗?我也在用这个部分类来评估... – DaniH 2011-03-17 15:11:55

+0

是的,如果你从基类继承,它们将会工作。 – Aliostad 2011-03-17 15:39:19

+0

我会试试这个! – DaniH 2011-03-18 14:21:22

相关问题