解决方案 »
- C# 根据时间 将datagradeview 数据 保存为csv格式 按照日期存储
- 同样的C# UDP广播程序安装不同的机器上,能够同时广播吗?
- 求高人帮忙分析下这个的算法
- c# Excel文件
- 求某一天在当年中是 属于单周还是双周?急。。。
- 走上c#之路~!高手指点~!
- datagrid(如ultragrid中)如何锁定一个列,即水平滚动条滚动时,其他列跟着移动,但关键列始终不动
- ArrayList中可否存放ArrayList类型的数据,应该怎样全部遍历?
- vs.net的window application crystal 9 的部署问题,急。。。。。。。。。
- 窗体大小发生变化时,里面的控件大小可以随之按比例缩放么?
- 导出Word
- Directx10 为什么不支持C# ?
你先有了“普通用户”,然后额外考虑到了“群主、版主、管理员”。那么你想表达每一个群主也是一个普通用户吗、同时每一个管理员也是一个普通用户吗?如果是,那么你起的这个“普通用户”名字就要误导性。而如果不是,仅仅因为后三者的行为特种有一部分与普通用户类似,那么你就要为这四者抽象出一个接口来,然后不论是普通用户还是后边三个,都是用这个抽象接口。只不过普通用户对这个抽象的扩展最少(甚至没有扩展),而后边三者各自有各自的扩展。这才是抽象的正常做法。而不是用代码表述为后三者都具有普通用接口。接口(或者class继承),具有重要的设计意义,要从领域分析角度去使用(使得需求分析和最终的代码实现完全一致),不要为了编程方便而滥用。
【你有没想过一个用户既可以是群主,又可以是版主,还可以是管理员呢?
用户就是用户,用户之间的区别只是他们具有的权限不同。】一想还真有这个问题!这个问题怎么解决?
最关键的问题是,举个例子:当我实例化一个普通用户之后,版主和管理员的方法对普通用户也是可见的。这就是我想细分成n个类的原因,我的想法是:一个类型的用户只能看见这个类型用户自己的方法,别的类型用户的方法对他来说是不可见。 这个思想大家觉得有问题吗?有什么方法可以解决这个问题。
{
public string GetAccount(string name)
{
//
}
public abstract void Do();
//
}
public class NormalUser : VisitorNeedToLogin
{
public override void Do()
{
Console.WriteLine("I am a normal user.");
}
//some methods belong to NormalUser only
}
public class GroupMaster : VisitorNeedToLogin
{
public override void Do()
{
Console.WriteLine("I am a group master");
}
//some methods belong to GroupMaster only
}
public class Administrator : VisitorNeedToLogin
{
public override void Do()
{
Console.WriteLine("I am an administrator");
}
//some methods belong to Administrator only
}
{
Huron.Visitors.NormalUser normal = new Huron.Visitors.NormalUser();
normal.GetAccount("");//所有用户都有的方法,而且实现方法也都一样。比如都通过name向数据源取得account的具体信息。
normal.Do();//所有用户都有的方法,但也许实现不同,比如普通用户可能默认转向前台首页,而管理员可能默认转向后台首页。
normal.IMNurmalUser();//普通用户特有的方法。
Huron.Visitors.Administrator admin = new Huron.Visitors.Administrator();
admin.GetAccount("");
admin.Do();
admin.IMAdmin();
}
我想是这意思吧。
数据层:
1.类User:里面全是方法,用户在网站上的所有对数据库的操作。
2.类ModelUser:里面存储用户的属性。
业务逻辑层:
类TieZi(帖子):里面都是方法,所有对帖子操作的方法,比如发帖、删帖、置顶等等。
帖子:id、标题、内容、发帖者、回复,等等等
.....