如何做扩展的设计?
举个简单的例子,
有一个用户发布新闻的功能,
新闻实体
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();
}
public class NewsRules:INews
{
public virtual void AddNews()
{
HttpContext.Current.Response.Write("添加成功");
}
}
public class NewsFactory
{
public INews GetFactory()
{
return new NewsRules();
}
}
客户端调用:
INews cmd = new NewsFactory().GetFactory();
cmd.AddNews();
如果有新的需求增加,比如以上列举的需求:
增加
public class NewsRules2:NewsRules
{
public override void AddNews()
{
//逻辑判断是否能增加
base.AddNews();
//增加成功,修改用户的发布数量
}
}
修改NewsFactory的GetFactory方法为
public INews GetFactory()
{
return new NewsRules2();
}
客户端调用不需要修改。
向各位大大们请教一下,以上的设计在实际项目中有实用价值吗?会不会有过度设计的嫌疑?
或者有什么更好的方法,能指教一下吗,谢谢
有一个用户发布新闻的功能,
新闻实体
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();
}
public class NewsRules:INews
{
public virtual void AddNews()
{
HttpContext.Current.Response.Write("添加成功");
}
}
public class NewsFactory
{
public INews GetFactory()
{
return new NewsRules();
}
}
客户端调用:
INews cmd = new NewsFactory().GetFactory();
cmd.AddNews();
如果有新的需求增加,比如以上列举的需求:
增加
public class NewsRules2:NewsRules
{
public override void AddNews()
{
//逻辑判断是否能增加
base.AddNews();
//增加成功,修改用户的发布数量
}
}
修改NewsFactory的GetFactory方法为
public INews GetFactory()
{
return new NewsRules2();
}
客户端调用不需要修改。
向各位大大们请教一下,以上的设计在实际项目中有实用价值吗?会不会有过度设计的嫌疑?
或者有什么更好的方法,能指教一下吗,谢谢
...全文
相关推荐
软件设计过程中画用例图的步骤
软件设计需求分析阶段,需要画用例图,本文介绍了用例图的画法。。。
一个前端报表设计器的设计分析
本文主要探讨了前端报表设计器的设计,以Qlik Sense的报表设计器为例,介绍了其核心类的设计,包括外部接口类如Workshop和WidgetFactory,以及内部实现类如Layout、Desktop和Cell。设计着重于Widget的扩展性和布局的灵活性,支持拖拽、调整大小等功能,并通过History类提供了撤销重做操作。
设计模式大作业绘图系统【六种设计模式+文档】
本文档详述了一个使用备忘录模式、简单工厂模式、迭代器模式、状态模式、模板方法模式和单例模式设计的Java绘图系统。系统包括铅笔、画刷等绘图工具,支持撤销、重做、保存等功能,通过设计模式提高了代码的可维护性和扩展性。
软件工程:(四)概要设计
本文介绍了软件工程中概要设计的定义、主要内容、任务、过程等。概要设计是连接用户研究与设计的重要阶段,主要任务是将系统扩展用例图转换为软件和数据结构。还介绍了层次图、HIPO图、结构图等图形工具,强调其是软件设计关键,为详细设计做参考。
中小银行核心系统去耦和扩展性架构设计.docx
中小银行核心系统去耦和扩展性架构设计.docx


分析与设计
