当前位置:编程学习 > C#/ASP.NET >>

多客户时,项目框架如何设计

请教一个问题,哪位知道的谢谢
C# winfrom 程序
  1,用C#已经开发完一个稳定的标准版本。已经给多家客户安装使用了。
  1.1 比如,现有2客户A和B要求发生改变。都是同一个form,但是需求不一样,
       A客户,界面修改和保存时增加一些验证;
       B客户,增加新的功能,TabPag页面,和其他功能;
       而其他客户不变 
  1.2 要实现上面客户的要求;在不改动原来的标准版的情况下,如何实现呢???框架要设计,项目要怎么改动,才能实现!!!

目的:此次去改,要不影响其他在使用的客户,而实现个别客户的需求。
     项目框架如何设计,与修改。。。 
框架 c# --------------------编程问答-------------------- 一个基本上能长期维系的开发设计,要保证以前的测试以后仍然可以通过。比如说界面X,你把它变为A或者B,那么原来的X必须保证仍然零bug下才能修改。

至于用户使用上的设计,简单通过app.config来配置不同用户使用不同的X子类窗体就行了。没有配置的,仍然初始化为X的实例。 --------------------编程问答-------------------- 如果要问:这是什么概念?

这其实是基本的工厂方法的概念(可惜有很多满口设计模式的人并没有把模式变成自己的感觉)。这种东西处处都存在。比如说以前的代码是
var theForm = new FormX();
theForm.User = "asdfafdsa";
theForm.ABC=......

现在需要扩展到多态的不同子类实例,那么对于原来的代码只应该破坏一条代码,即果断改为
var theForm = CreateFormX();
theForm.User = "asdfafdsa";
theForm.ABC=......


然后你可以在实现CreateFormX,让它返回不同的对象。这些对象既可能是FormX的实例,也可能是从FormX继承的其它类型对象的实例。你的问题中就应该把不同用户的不同窗体实现为原来窗体的子类。 --------------------编程问答-------------------- 比如说你可以实现为:
public FormX CreateFormX()
{
    var st = ConfigurationManager.AppSettings["FormX"];
    if(st=="FormA")
        return new FormA();
    else if(st=="formB")
        return new FormB();
    else
        return new FormX();
}

有不同的实现CreateFormX的方法(例如反射)。但是这都是小伎俩。关键地是,在原来的代码中,你只应该破坏一条代码,这个CreateFormX返回的窗体都是FormX(只不过可能是其扩展自类的实例),于是你就不用担心也不用担心原来的辛辛苦苦写的那些代码被轻易破坏了。这就是面向对象设计。 --------------------编程问答-------------------- 以我的经验,框架设计再灵活,也无法满足多个用户的需求,一般来说你不得不创造两个不同的源程序版本,分别维护,很痛苦, --------------------编程问答-------------------- 就是同一个窗口针对不同的用户展示不同的窗口元素,嗯!我觉得可以这么来理解嘛,也就是权限,嘿嘿,winform程序嘛,这个好实现吧,就是不知道你的AB用户是指A用户群B用户群还是什么什么的,如果AB都是不同的群体用户,同窗口不同操作需求,那我更建议你模仿权限管理来实现,反正是我,我肯定这么做,给用户分个类型就可以了,要是哪天用户坑爹发烧了,给你说:我觉得还是弄回原来的好点,这个新改的感觉用起来不爽,嘿嘿,你不会又改项目什么什么的吧,麻烦,直接配置回去,把新功能隐藏就可以了噻,要是你想完善一下,把功能都可配置,也可以噻,嘿嘿 --------------------编程问答-------------------- 同一个对象表现得越多面性,你二天就哭吧 --------------------编程问答-------------------- 改他妹。标准版就这样,您这样的需求只能重新开发。拿钱来!!! --------------------编程问答-------------------- 做外部配置文件,我给公司开发的AIS和雷达数据处理程序就是一个应用,用配置文件来配置不同的功能和权限。包含:AIS解析、数字雷达解析、目标报警判断、靠泊记录、违停记录、自动更新、GPS TCP处理等等,还包含加密狗配置~

合理利用配置文件,这样不同的用户,给不同的配置文件,或者安装包做下修改配置文件即可。如果怕多余功能暴露,加个狗给他~或者在配置文件中,加一个功能的代码计算种子,只有你知道规则的。
当然这样做,内部代码还是有冗余的。因为不推荐在一个UI上做结构上和业务上的多样化,你会哭得很惨~哈哈我有经验~ --------------------编程问答--------------------
引用 6 楼 mf19870602 的回复:
同一个对象表现得越多面性,你二天就哭吧

因为你没有懂什么叫做多态,也就是说没有理解什么叫做面向对象软件设计。 --------------------编程问答-------------------- 我再强调一下,什么“配置、反射”之类的都是雕虫小技,都是次要的。最主要地,是你根据FormX接口而设计,因此原来的程序仍然几乎未经任何破坏、可以随时测试的!

技术不重要,“为什么要这种技术”才是重要的。技术也许只要现学现卖就会了。如果一个设计师,他把具体实现技术当作什么高尚的东西,而把设计思想不当回事,那么就反而会本末倒置、无法理解这里是如何“不影响其它在使用的客户”的,只会抱怨了! --------------------编程问答--------------------
引用 8 楼 WintelZhao 的回复:
因为不推荐在一个UI上做结构上和业务上的多样化,你会哭得很惨~哈哈我有经验~

就lz的问题来说,你知道有什么“多样化”呢?

如果需要遵循的接口很简单,那么这种“经验”恐吓就是有害的。 --------------------编程问答-------------------- sp1234;

"如果需要遵循的接口很简单,那么这种“经验”恐吓就是有害的。"
此話怎麼說...
那該如何處理這種情況呢

您是說用工厂方法去實現...? --------------------编程问答-------------------- 我上个项目UI就是用的xml来配置界面的信息, 你可以考虑下可配置界面设计模式 --------------------编程问答-------------------- 类似于win7和win 8 ,不同操作系统,不同的展示,工厂设计模式中有详细的讲解。 --------------------编程问答--------------------
引用 13 楼 vssvss 的回复:
我上个项目UI就是用的xml来配置界面的信息, 你可以考虑下可配置界面设计模式


這個只能是UI,代碼部分就不要弄,,, --------------------编程问答--------------------
引用 15 楼 tyhua134 的回复:
引用 13 楼 vssvss 的回复:我上个项目UI就是用的xml来配置界面的信息, 你可以考虑下可配置界面设计模式

這個只能是UI,代碼部分就不要弄,,,

UI 的逻辑也是的 比如增加一个节点 只要把这个节点的dll写到xml里面 就可以了 --------------------编程问答--------------------
引用 11 楼 sp1234 的回复:
引用 8 楼 WintelZhao 的回复:因为不推荐在一个UI上做结构上和业务上的多样化,你会哭得很惨~哈哈我有经验~
就lz的问题来说,你知道有什么“多样化”呢?

如果需要遵循的接口很简单,那么这种“经验”恐吓就是有害的。


没有恐吓,请注意我的用词“不推荐”。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,