【问题标题】:Interface and method for DTO and EntityDTO和Entity的接口和方法
【发布时间】:2020-02-25 08:34:56
【问题描述】:

如果我有一个实体类

public class BarcodeSetting
{
   string Prefix {get;set;}
   string RangeStart {get;set;}
   string RangeEnd {get;set;}
}

和一个 DTO

public class BarcodeSettingDTO
{
   string Prefix {get;set;}
   string RangeStart {get;set;}
   string RangeEnd {get;set;}
}
  1. 我的问题是我应该在客户端(winform)中使用BarcodeSettingDTO 吗?或者创建另一个类,例如 BarcodeSettingViewModel

  2. 如果我想要一个方法IsBarcodeValid

public bool IsBarcodeValid(BarcodeSettingDTO dto, string barcode)
{
   // return true if barocode is in BarcodeSettingDTO range
   // return false
}

我应该把它放在哪里(作为静态的辅助方法,或者把它放在BarcodeSettingDTO 中)? 我以前认为IsBarcodeValid应该是BarcodeSetting里面的方法,但是贫血模型不允许有任何方法。

  1. 如果我对一个实体有多个 DTO(在不同的应用程序中)。如何重用一些方法?例如,BarcodeSettingDTOBarcodeSettingAnotherDTO(几乎类似于 BarcodeSettingDTO)。这是否意味着我应该为 DTO 创建IBarcodeSettingDTO,并使用IsBarcodeValid (IBarcodeSettingDTO dto, string barcode)。我在谷歌上搜索,有些人认为 DTO 不应该有任何接口。所以我真的很困惑。解决这个问题的正确方法是什么?

【问题讨论】:

    标签: java c# methods interface dto


    【解决方案1】:

    Dto 仅用于在层之间传输数据,因此在引用验证或业务逻辑时添加一些行为不在其职责范围内。尝试将您的验证和业务规则集中到业务规则验证器类或丰富的实体类中。

    【讨论】:

      【解决方案2】:

      1.我的问题是我应该在客户端(winform)中使用 BarcodeSettingDTO 吗?或者创建另一个类,例如 BarcodeSettingViewModel

      ==>> 这取决于。单独解耦和查看相关模型目标总是好的。如果您在表单模型和 DTO 中看到完全相同的属性/方法,则可以保持相同。但是你暴露的 DTO 不能用作持久对象,或者应该直接与持久层交互。

      2。 IsBarCodeValid : 我应该把它放在哪里(作为静态的辅助方法,或者放在 BarcodeSettingDTO 中)?

      ==>> 我建议为模块化和可扩展性创建一个 Validator 辅助类

      3.如果我对一个实体有多个 DTO(在不同的应用程序中)。如何复用一些方法?

      ==>> 使用继承原则。创建 BarcodeSettingDTO 作为父级和 BarcodeSettingAnotherDTO 作为子级,即

      BarcodeSettingAnotherDTO extends BarcodeSettingDTO
      

      【讨论】:

      • 在问题 3 中,它似乎仍然是有线的,因为 java 或 c# 不允许继承多个类,如果我有多个方法,如IsBarcodeValid,我不知道不添加更多方法该怎么办接口。
      • 你能给出多个 IsBarcodeValid 方法的示例用例吗?您可以根据需要覆盖/重载功能。
      猜你喜欢
      • 1970-01-01
      • 2020-08-03
      • 2013-11-14
      • 1970-01-01
      • 2013-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-14
      相关资源
      最近更新 更多