English 中文(简体)
域名(实体)的验证电文
原标题:Localizing validation messages from Domain Objects (Entities)

我无意在守则所属的DDD中就验证问题进行辩论,而是侧重于一种可能的做法以及如何解决当地化问题。 我对我的一个领域目标(实体)有以下行为(方法),即:

public void ClockIn()
{
    if (WasTerminated)
    {
        throw new InvalidOperationException("Cannot clock-in a terminated employee.");
    }

    ClockedInAt = DateTime.Now;
    :
}

如你所知,Clock 采用的方法是检查目标状况,以确保雇员不终止。 如果雇员被解雇,我们就提出一种与“允许贵实体进入无效状态”做法相一致的例外。

我的问题是,我需要把例外信息本地化。 通常(在申请中)使用申请服务(I Localization Service),在需要获得其方法的班级使用MEF进口。 然而,如同任何DI框架一样,如果该物体由集装箱立即发射,则只能注入/进口该物品。 一般来说,DDD的情况并非如此。

Furthermore, everything I ve learned about DDD says that our domain objects should not have dependencies and those concerns should be handled external from the domain object. If that is the case, how can I go about localizing messages such as the one shown above?

这不是一项新要求,因为许多商业应用要求全球化/当地化。 我赞赏关于如何开展这项工作的一些建议,并且仍然符合DDD的目标。

<>>>>>

我没有首先指出,我们的地方化是所有数据库的驱动力,因此我们确实有一个地方化服务(通过可注射的“地方化服务”接口)。 因此,作为该项目的一部分,使用静态资源类别视觉演播室是一种可行的选择。

www.un.org/spanish/ecosoc ANOTHER UPDATE

也许会将讨论推向于说,这只是一种教育、科学和技术服务。 因此,客户可以成为简单的网络浏览器。 因此,我无法期望打电话者能够从事任何形式的地方化、绘制法典等工作。 当出现例外情况时(在这种做法中,试图将域标变成一个无效的国家是一种例外),就会放弃一个例外,并将适当的《吉大港山区地位法》退回,同时发出例外信息,该信息应当被本地化到电离层文化中(Accept-Language)。

最佳回答

不能确定这一对策对你们有多大帮助,但当地化确实是一个首要的关切。 举例来说,将例外信息本地化并不是常见的做法,因为终端用户看不出诸如例外信息中所描述的技术细节(如果不是母语,谁会给你的例外情况下打断,则可能有足够的英语)。

当然,如果有必要,你总是能够处理例外情况,并向您的前辈的用户提供本地化、方便用户的信息。 但是,把它当作一个老生常关注的问题,应当简化你的架构。

问题回答

正如Clafou说的,你在以任何方式向国际律师联合会传递信息时不应使用例外。

如果你仍然坚持这样做,一种选择是放弃错误法而不是信息。

<代码>新行 InvalidOperationException ("ERROR_TERMINATED_EMPLOYEE_CLOCKIN");

之后,如果发生这种情况,你需要做什么与例外(log,不管什么地方化)。

如果地方化是该领域/应用的重要部分,那么,如果地方化是属于哪一个阶层的公民,那么就应当让地方化成为第一阶层的公民。 我不肯定你所说的“DDD”话,即我们的领域目标不应有依赖性”,请解释。

You are correct for trying to avoid adding internal dependencies to your domain model objects.

更好的解决办法是,在以下服务方法中处理行动:

public class EmployeeServiceImpl implements EmployeeService {

   public void ClockEmployeeIn(Employee employee) throws InvalidOperationException {
      if (employee.isTerminated()) {
          // Localize using a resource lookup code..
          throw new InvalidOperationException("Error_Clockin_Employee_Terminated");      
      }       
      employee.setClockedInAt(DateTime.Now);
   }
}

然后,在你发出锁定电话时,你可以采用你的DI框架来提供这一服务,并利用这一服务,使你的域名从商业逻辑的变化中分离出来。





相关问题
DDD - Returning entity in response to a service operation

I am new to domain driven development & have a simple question. If a service needs to generate some entity as a response to an operation then how should it be done? One of the ways is to inject ...

Domain Driven Design efforts in dynamic languages? [closed]

Are you aware of any DDD efforts in a dynamic language ? Practical resources on DDD tend to decrease quite dramatically when straying from enterprise-oriented solutions (a google search exluding C#, ....

Accessing domain objects in the view

If I don t want to expose the internal state of my Domain Objects, but I need to display them, I can think of three approaches. Which of these is the most "correct" (if any?). The "DTO/ViewModel ...

DDD screen cast question?

I wathced a screen cast on DDD by Greg Young the other day which spoke about persisting all state transitions of an object, instead of it s state when saved, then to load it "replay" all these ...

How to fluent-map this (using fluent nhibernate)?

I have two tables in my database "Styles" and "BannedStyles". They have a reference via the ItemNo. Now styles can be banned per store. So if style x is banned at store Y then its very possible that ...

热门标签