2011-03-17 35 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

相關問題