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

问题描述 投票:0回答:1

我有一个网站在前端使用Angular,在后端使用C#。我有一个从数据库中获取数据的c#类。我有一个新的字段(值的西班牙语翻译)我想添加,并且不确定以下3个场景中的哪一个是最佳的。

这是代码目前的样子:

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有什么缺点吗?

c# angular class internationalization restful-url
1个回答
0
投票

我的问题是,为什么要在前端呢?这需要您在两个级别处理本地化,同时还将额外数据发送回浏览器,在许多情况下您不需要这些数据。

对我来说,我会决定语言服务器端并适当地加载内容。如果是西班牙语客户端请求数据,那么名称字段将是西班牙语名称,英语用户然后是英文名称等...这有利于处理服务器端的所有本地化,至少到目前为止作为字符串而言。

但是,重要的是要理解,本地化不仅仅是文本,因此您可能仍需要客户端格式化数字,日期等...为此,我建议使用格式化库来获取区域设置信息,然后提供此来自服务器的信息通过配置有效负载。

至于语言服务器端的检测,这可以通过多种方式完成。例如:

  1. 您可以使用您的请求发送明确的标头或变量,指示它使用哪种语言。
  2. 您可以使用浏览器发送的Accept-Language标头来决定您要使用哪种语言。
  3. 您可以将其设置为用户可以在其配置文件中设置的配置选项,并检查活动用户的数据库记录以确定您要使用的语言。
© www.soinside.com 2019 - 2024. All rights reserved.