如何在不使用设计模式的情况下通过添加另一条规则来扩展业务逻辑



我需要你的帮助。我得到了一个测试项目,在该项目中,我将返回HTML table,其中包含来自DB table的基于员工角色的员工信息。目前有三个角色:管理员、办公室主任和配送经理。管理员可以查看所有信息,办公室主任可以查看办公室的所有员工,配送经理可以查看部门的所有员工(无论办公室)。此外,员工可以担任多个办公室的办公室主任,他可以担任多一个部门的配送经理,最后一名员工可以同时担任配送经理和办公室主任。我不想使用任何design patternstrategy,builder,factory),因为我读到如果有15-20个以上的角色,我应该使用它。我有这个简单的解决方案,但我对它不满意,因为如果将来我想添加另一个角色,例如项目经理,他可以根据不同的查询看到一些东西,那么在这个解决方案中实现这个角色会更困难,代码也很难维护(尤其是如果我增加2到3个角色,这是我未来期望的最大值)。

如果有人愿意看看代码,告诉我他的想法或想法,我如何在不使用设计模式的情况下重构我的代码,那么它将是可维护的,并为添加新角色(一两个)而开放。

还有一种方法是返回员工角色列表List<string> Positions。然后,基于角色,这里是我的方法中business logic的主要部分,我想让你们看看并提出建议。

public List<EmployeeRecord> GetListOfEmployeeInfo(Employee emp)
{
    List<EmployeeRecord> records = new List<EmployeeRecord>();
    if (emp.Positions.Contains("Admin")) 
    {// stored procedure that retrieves all info, 
     //there is no need to check if employee has another role, because as admin he can see everything} 
     else
     {
         if(emp.Positions.Contains("OfficeDirector") && emp.Positions.Contains("DeliveryManager"))
         {
           //stored procedure that returns distinct data for these 2 roles
         }
         else
         {
           if (emp.Positions.Contains("OfficeDirector"))
           {//recursive method that will retrieve all info in case employee is office director in more than 1 office, and stored procedure}
           if (emp.Positions.Contains("DeliveryManager"))
           {//recursive method that will retrieve all info in case employee is delivery manager on more than 1 department, and stored procedure}
         }
     }
 // ... further code to populate list of records etc
 }

谢谢!

我不想使用任何设计模式(战略、建设者、工厂)因为我读过,如果超过15-20个,我应该使用它角色。

我想说,无论你在哪里读到。。只是一种观点,在"我看来"他们错了/不够清楚。

有人说,当你"只有"X个Y要处理时,你不应该使用一个模式,这是说他们觉得理解/实现这个模式的"时间"one_answers"精力"不值得。但我认为这是无效的。因为设计模式的(正确)使用为您的项目增加了结构和可预测性。如果你能很好地描述你的类和文档的名称。然后,在一个非常简短的一瞥,你应该能够快速识别或消除类作为你正在工作的潜在问题

这样的例子是:"添加新的员工角色",如果你在工厂/建设者中使用策略对象,那么你所要做的就是将你的新"角色"添加到角色列表中,然后创建一个新的策略类。(可能编辑将多个角色逻辑组合在一起的构建器/工厂类/方法,但这取决于具体的实现细节,也可能被重构)


我的方法是使用Enum列出位置,使用Builder构建一个"查询"(抽象含义),返回我的结果。在这个构建器中,我会使用策略模式为每个位置的单个逻辑创建类。可能使用命令处理器模式来实际处理每个策略的命令对象。

然而,这利用了https://en.wikipedia.org/wiki/Design_Patterns_(书籍)和http://www.openloop.com/softwareEngineering/patterns/designPattern/dPattern_CommandProcessor.htm

最新更新