gpt4 book ai didi

c# - 扩展基类以包含详细信息?

转载 作者:行者123 更新时间:2023-12-02 05:12:57 25 4
gpt4 key购买 nike

我的 DAL 返回了一个 DTO。例如

public class CustomerDTO
{
public int CustId {get; set; }
public int CustType {get; set; }
.
.
.
public string GetCustomerTypes{
get { if (CustType== 1)
return "Special Customer";
else if(CustType==
}

现在我在我的类中有多个属性,这些属性没有与任何表链接,只是代表一些属性的代码,比如我可以拥有的 CustId(1='特殊客户',2='违约者'或 3='新客户').现在我需要在 DTO 上显示它们的属性。

我可以像上面那样将我的业务逻辑嵌入到 SQL 语句或我的 DTO 类中。然而,对于各种专栏,我最终得到了很多条件逻辑。此外,如果我创建另一个 DTO,则会再次重复此条件逻辑。

如何在我的类设计中封装此逻辑并避免重复?

最佳答案

如果某段逻辑重复出现,则应将其放在单独的方法中。该方法的放置取决于您的系统结构,但通常您有以下三个主要选择:

  • 将逻辑放入辅助类
  • 将逻辑放入基类
  • 将逻辑放入扩展方法

第一个选项最简单,需要最少的修改:只需添加一个带有静态方法的类,如下所示:

static class DtoHelper {
public static string GetCustomerType(int type) {
... // Custom logic goes here
}
}

第二种方法最不灵活,因为它要求您的 DTO 继承一个公共(public)类:

class WithCustomerType {
private int custType;
public string CustomerType {
get {
... // Custom logic goes here
}
}
}
public class CustomerDTO : WithCustomerType {
...
}

第三个选项更灵活,因为它使用接口(interface)而不是类型:

interface IWithRawCustomerType {
int RawCustomerType {get;}
}
static class DtoExtensions {
public static string GetCustomerType(this IWithRawCustomerType dto) {
int type = dto.RawCustomerType;
...
}
}
class CustomerDTO : IWithRawCustomerType {
...
}

关于c# - 扩展基类以包含详细信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15110988/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com