我需要你的帮助。我得到了测试项目,其中HTML table
根据他们的角色从DB table
返回了design pattern
员工信息。目前有3个角色:Admin,Office Director和Delivery Manager.Admin可以查看所有信息,办公室主任所有员工都来自他的办公室,而交付经理所有员工都来自他所在的部门。不仅办公室的员工也可以是办公室主任,他可以是多个部门的交付经理,最后一个员工可以是交付经理和办公室主任。我不想使用任何strategy,builder,factory)
(List<string> Positions
,因为我知道如果角色超过15-20,我应该使用它。我有这个简单的解决方案,但是我对此不满意,因为如果将来我想添加另一个角色,例如项目经理,可以根据不同的查询看到某些内容,那么在这个解决方案中实现该角色会更难,代码也会很难维护(特别是如果我添加2或3个角色,这是我期望的最大值)。
如果有人善于查看代码并给我他的想法或想法如何在不使用设计模式的情况下重构我的代码,那么它将是可维护的并且可以用于添加新角色(一个或两个)。
还有另一种方法是返回员工角色列表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
}
的主要部分,我希望你看一下并提出建议。
ignore_const_cols
谢谢!
答案 0 :(得分:2)
我不想使用任何设计模式(策略,建设者,工厂) 因为我已经读过,如果超过15-20,我应该使用它 作用。
我会说,无论你在哪里阅读......只是一种观点,而且我认为这是一种观点。他们错了/不够清楚。
有人说当你只是&#34;只有&#34;你不应该使用模式。有X个Y(s)要处理,说他们感觉不到时间&#39;和努力&#39;理解/实施模式是值得的。但我认为这不是有效的。因为(正确)使用设计模式可以为项目增加结构和可预测性。如果您描述性地为您的类和文档命名。然后在非常简短的一瞥中,您应该能够快速识别或消除课程作为您正在进行的工作的潜在问题。
这样的例子是:&#34;添加一个新的员工角色&#34;,如果您将策略对象与工厂/构建器一起使用,那么您所要做的就是添加新的&#39;角色&# 39;到角色列表,然后创建一个新的策略类。 (可能编辑将多个角色逻辑组合在一起的构建器/工厂类/方法,但这取决于具体的实现细节,并且可能也会被重构)
我的方法是使用Enum列出位置,使用Builder构建查询&#39; (抽象意义)将返回我的结果。在该构建器中,我使用策略模式为每个位置的个体逻辑创建类。可能使用命令处理器模式来实际处理每个策略的Command对象。
但是,这会使用https://en.wikipedia.org/wiki/Design_Patterns_(book)和http://www.openloop.com/softwareEngineering/patterns/designPattern/dPattern_CommandProcessor.htm
中的几种模式