如何用c#去写一个可扩展性的方法

数据的流 2015-08-25 11:13:22
昨天去面试时候被问了一个问题,举例是微信开发方面的,微信公共帐号一般会提供用户回复指定内容做出不同反馈的功能,比如:XGMM(修改密码)、TJDD(提交订单)、DDGZ(订单跟踪),这些命令根据需要可以增加、删除,如何去写一个可以扩展方法或者说可以无需修改就可以重用的方法。排除使用if else,这个后期添加命令时候需要修改代码,不便维护
...全文
295 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
数据的流 2015-08-27
  • 打赏
  • 举报
回复
引用 7 楼 suiye007 的回复:
其实最好的做法是公用方法抽象出来,再用指令进行反射,可以做到不改代码,这个我当初做过。
能否给出一段代码实例,不需要可以跑起来,写下大概的就行
数据的流 2015-08-27
  • 打赏
  • 举报
回复
引用 9 楼 sp1234 的回复:
[quote=引用 7 楼 suiye007 的回复:] 其实最好的做法是公用方法抽象出来,再用指令进行反射,可以做到不改代码,这个我当初做过。
合适的回答,给合适问题。lz 应该是还看不懂你的这类基于通用的命令抽象的设计的。[/quote] 看着比较高端,确实看不懂,有具体的实例可以参考么
諾临風 2015-08-26
  • 打赏
  • 举报
回复
其实最好的做法是公用方法抽象出来,再用指令进行反射,可以做到不改代码,这个我当初做过。
於黾 2015-08-26
  • 打赏
  • 举报
回复
可以把指令和dll名,函数名放进数据库里去 然后根据指令,查询dll名和函数名,动态加载,反射调用
数据的流 2015-08-26
  • 打赏
  • 举报
回复
引用 4 楼 starfd 的回复:
每个业务的处理都有自己的类
interface IJob
{//以及其它一些公共的参数,比如手机号码
      void Done();
}

class XGMMJob:IJob
{
     public void Done(){//XGMM的逻辑
     }
}
然后就是在你那个统一的方法里面进行调整
接口确实是一种实现方法,还有其他的思路吗
  • 打赏
  • 举报
回复
引用 7 楼 suiye007 的回复:
其实最好的做法是公用方法抽象出来,再用指令进行反射,可以做到不改代码,这个我当初做过。
合适的回答,给合适问题。lz 应该是还看不懂你的这类基于通用的命令抽象的设计的。
likevs 2015-08-26
  • 打赏
  • 举报
回复
二楼牛叉,把方法的参数委托化,不过如果参数个数变了,怎么处理? 我没时间去想太多,不过可以给楼主一个万金油的思路:方法参数可选化,调用参数命名化 不懂楼主能不能理解,就是定义方法时,使用可选参数,并带有默认值,比如 void MyFuction(int? id = null, string name = null, bool? isVailed = null) 然后就是调用方法命名化调用,比如 MyFuction(isVailed: true, id: 123456); MyFuction(isVailed: true, id: 123456, name: "cctv"); 当然,还可以配合param[] arryParm这种
  • 打赏
  • 举报
回复
每个业务的处理都有自己的类
interface IJob
{//以及其它一些公共的参数,比如手机号码
      void Done();
}

class XGMMJob:IJob
{
     public void Done(){//XGMM的逻辑
     }
}
然后就是在你那个统一的方法里面进行调整
数据的流 2015-08-25
  • 打赏
  • 举报
回复
引用 2 楼 starfd 的回复:
如果只是根据用户回复的字符串的话,妥妥的简单工厂就可以了……
具体如何实现,需求是根据用户回复的不同字符串去匹配对应业务逻辑
  • 打赏
  • 举报
回复
如果只是根据用户回复的字符串的话,妥妥的简单工厂就可以了……
  • 打赏
  • 举报
回复
第一感觉,策略模式,也就是传递委托

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧