我需要一个建议。我正在开发一个管理大学学生项目的计划。 (我自己学习,这是我第二年的项目)。使用c#.NET 4,WINFORMS。
我有不同的用户具有不同的权限。我不想使用像DB这样的重量级解决方案,添加GROUPS,......
我想要一个非常简单的解决方案,并且我需要至少使用23种编程模式中的一种。
我学习了抽象工厂,策略,单身人士等基本模式......但我无法选择合适的模式。
如果我使用基本继承,那么我需要覆盖childs中的一些方法,因为它们继承了父级的所有方法......
有什么想法吗?主要目标是使用设计模式。
抱歉英语不好:)
评论太长了,所以我会写在这里......
我知道我只需要在需要的地方使用模式。但是,请告诉我的老师=))
他希望我在我的程序中使用3种模式。例如,我使用Singleton连接到MySQL。
所以我需要再使用2个模式。
工作原理。有人进入系统。我在静态类Auth中创建“指针”以登录用户:
static class Auth
{
public static CommonUser _currentUser;
public static CommonUser getUser()
{
return Auth._currentUser;
}
}
例如,如果教师已登录,我会这样做:
Auth._currentUser = new Teacher(id, name, blablba, blabla, blabla);
如果他想添加新项目,他点击按钮 ADD PROJECT ,表单调用添加项目,他填写所有输入,点击添加和我必须要求:
Auth._currentUser.addProject(projectId, projectTitle, ....);
如果管理员登录系统,那么为了添加新项目,我会这样做:
Auth._currentUser = new Admin(id, name, blablba, blabla, blabla);
然后调用相同的方法。
Auth._currentUser.addProject(projectId, projectTitle, ....);
但是这里metod addProject是一样的,所以我必须使用继承。
但如果Seretary登录,我会这样做:
Auth._currentUser = new Seretary(id, name, blablba, blabla, blabla);
秘书必须没有权限:
Auth._currentUser.addProject(projectId, projectTitle, ....);
那么我需要在秘密类中覆盖addProject方法并将其清空,或者调用MessageBox吗?
这样的东西......所以,他希望我在这里使用一种模式: - / 说....如果我需要添加具有不同权限的其他人,所以我不需要在我的所有程序中进行更改...
例如一些照片(抱歉希伯来语):
答案 0 :(得分:0)
执行此操作的一种方法是使用 Command (或 Action )模式,其中每个操作(例如 Add Research )都已封装在一个对象中。这允许在实际执行操作之前检查中心位置的权限。
实际的权限检查通常是通过将用户映射到角色/组并为每个组定义一组允许的操作来完成的。这可以使用Microsofts Authorization Manager或数据库中的简单角色表来实现。