将属性添加到(高度使用的)现有类vs创建新类vs有条件?

时间:2019-03-01 19:14:14

标签: c# angular class internationalization restful-url

我有一个站点,该站点在前端使用Angular,在后端使用C#。我有一个c#类,可从数据库中获取数据。我要添加一个新字段(值的西班牙语翻译),不确定以下三种情况中的哪一种是最佳的。

这是当前代码的样子:

public class CustomerIssueManager
{
        static public List<GenericRecordDTO> GetCustomerIssues(MyStore db)
        {
            List<GenericRecordDTO> responseDTO = new List<GenericRecordDTO>();

            try
            {
                var customerIssues = db.CustomerIssues.Where(m => m.IsActive && m.Name.ToLower() != "none").OrderBy(o => o.Name).ToList();

                foreach (var c in customerIssues)
                {
                    GenericRecordDTO issue = new GenericRecordDTO();
                    issue.ID = c.ID;
                    issue.Value = c.Name;
                    responseDTO.Add(issue);
                }
            }
       }
}

public class GenericRecordDTO
{
    public int ID { get; set; }
    public string Value {get; set; } = "";
}

这些是我正在考虑的方案:

场景1 : 将以下内容添加到GenericRecordDTO之间有什么显着区别:

public string SpanishValue { get; set; } = "";

说明:有许多使用GenericRecordDTO的类不需要SpanishValue

方案2 : 与创建另一个类相反:

public class GenericRecordTransDTO 

并添加SpanishValue吗? 解决方案1中的问题

方案3 : 与按原样保留GenericRecordDTO.cs相反,但是在CustomerIssueManager.cs中,为西班牙站点设置了条件:

if(englishSite) { issue.Value = c.Name; }
else { issue.Value = c.SpanishName; }

不确定现在是否可以检查西班牙语网站还是以后需要检查?与在TypeScript / Angular中检查西班牙语站点相比,在此处检查西班牙语站点是否有任何弊端?

1 个答案:

答案 0 :(得分:0)

我的问题是,为什么要在前端完全这样做?这要求您在两个级别上处理本地化,同时还需要将不需要的额外数据发送回浏览器。

对我来说,我将决定语言服务器端并适当地加载内容。如果是请求数据的西班牙语客户端,则“名称”字段将是西班牙语名称,英语用户,然后是英语名称,等等。。。这样做的好处是至少可以处理服务器端的所有本地化。就字符串而言。

但是,重要的是要理解,本地化不只是文本,因此您可能仍然需要客户端格式化数字,日期等。为此,我建议您使用可接收语言环境信息的格式化库,然后通过配置有效负载从服务器传递此信息。

就检测语言服务器端而言,这可以通过很多方法来完成。例如:

  1. 您可以随请求发送一个显式标头或变量,以指示使用哪种语言。
  2. 您可以使用浏览器发送的Accept-Language标头来确定您要使用的语言。
  3. 您可以将其配置为用户可以在其个人资料中设置的配置选项,并检查活动用户的数据库记录,以确定您要使用哪种语言。