举个简单的例子,
有一个用户发布新闻的功能,
新闻实体
public class News
{
public string ID{get;set;}
public string UserID{get;set;}
public string Name{get;set;}
}
如果说用户发布一个新闻,则是调用逻辑类的AddNews()方法。
现在需要增加一个新需求,要控制用户发布新闻的数量。
最常规的做法就是在用户实体增加一个新闻数量的标记属性,在AddNews()里加入判断控制,同时每则增加一个新闻则改变新闻数量的标记。
我想请教的是:如何在一开始的设计中,就预留这种可能的扩展,在类的设计中应该怎么去做。能做到在新的需求中能最少的改变,实现最小的偶合。
盼高手指教,万分感谢!
定义一个明确的新闻发布的动作周期
比如
【检查是否允许发送】-【筛选细纹内容】-【发送新闻】
【检查是否允许发送】 这个可以定义成一个接口
之后就参考策略模式 可能你有好多策略 可选择可配置
程序永远都是为业务服务的,所以在搞清楚业务之前做代码很可能是不满足业务需求的,像上面所说的这种属于一个业务功能,也就是说这是需求的一部分,只能在设计之前就搞清楚,而后期去完善就只能去改原来的设计了。当然了,为了尽量降低后期维护的更改范围,可以这么做:设计一个类,属性中包含其他实例,具体有哪些实例是通过读配置文件,通过反射生成,这样方便扩展,但是在实际操作过程中,该原来的代码是难免的。
接口的方法加两个参数.
public interface INews
{
void AddNews(ref News news,ref User user);
}
不要继承旧的操作类,继承接口
public class NewsRules2:INews
继承旧的类不利于维护工作,而且NewsRules2和NewsRules是同一层次的,使用继承会模糊该类的意义.
业务变动,添加类与方法,而不修改原有。