webservice中命令方法太多 请教如何使用设计模式简化类结构

www7788softcom 2013-11-01 11:14:31
webservice仅开放唯一接口 传入方法名和参数调用服务器端方法
Data78Back中有各种方法 刚开始用起来蛮好 现在发现方法越来越多 越来越难管理了 请教如何使用设计模式 将大量的方法分类管理.
这种情况感觉正好是命令模式中 有大量命令类的情况吧
namespace www7788softcom
{
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple, InstanceContextMode = InstanceContextMode.PerCall, UseSynchronizationContext = false)]
[ServiceContract(Namespace = "")]
[SilverlightFaultBehavior]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class Data78Svc : Data78Back
{
/// <summary>
/// 执行服务方法
/// </summary>
/// <param name="kind"></param>
/// <param name="sid"></param>
/// <param name="cid"></param>
/// <param name="parms"></param>
/// <returns></returns>
[OperationContract]
public Stream Go(string kind, string sid, string cid, object[] parms)
{
//验证用户名...


MethodInfo method = typeof(Data78Back).GetMethod(kind );
if (method == null)
return StrToMS("方法不正确");

//调用方法的参数
object[] paras = { user, parms };

object result = method.Invoke(new Data78Svc(), paras);

return (MemoryStream)result;

}
...全文
447 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanghui0380 2013-11-02
  • 打赏
  • 举报
回复
额,你提供的就是通讯用api,这种api本来就是散点 你会指望这种api具有封装,继承,多态的特性吗?明显你也不会有这种期望 所以这里没啥设计模式滴,了不起你按面多划几个目录而已 xxx/用户相关/ xxx/供应商相关/ ps:修改某一部分的功能时不影响其它,这和你是否提供这种离散或这面状(博客园的那些高级名词控喜欢叫SOA)api无关,这个要求考验的是你内部是否面向抽象,只要你内部是面向抽象的,那么外部提供这些相对离散的和具体服务相关的离散api其实问题不大
www7788softcom 2013-11-02
  • 打赏
  • 举报
回复
确实只能算是通信用的 看样子我只需要修改把1个大类分解成几个功能分隔的小类就可以了 我这个一个服务连接几个不同的程序 动不动就要改的 不是每个人都能开发淘宝这种大而稳定的系统的啊 几百连接的小型杂乱系统不这样处理 按淘宝这样搞 每个类都给弄2份到客户端和服务器 一修改两边都得重新编译 说不定一不小心 原来能用的程序就不能用了 淘宝能开发那样的API 是因为跑了十来年之后 发现业务模式全固定了基本上不会变了才弄了这开放平台 它要是敢对双11双12等各种活动弄出个开放API来 我就信它厉害
tcmakebest 2013-11-02
  • 打赏
  • 举报
回复
传个命令号吧,然后用 switch() 分别执行不同的功能。
www7788softcom 2013-11-01
  • 打赏
  • 举报
回复
www7788softcom 2013-11-01
  • 打赏
  • 举报
回复
指令的格式是固定的很好用 方法名 用于用户验证的登录状态的 用于验证用户所属组的组ID 方法可变参数 所以调用它很舒服 只需要知道指令名即可 关键是这样处理方法逐步增加后 代码文件很长 方法太多不利于管理了 虽然方法命名规范一下 找起来还是比较方便 但是对整个类的把握就越来越力不从心了 觉得应该把它拆分成若干小类才好 这样修改某一部分的功能时不影响其它 所以请教下如何拆分 方法功能例如:下载文件 上传文件 注册用户 操作方面的功能例如:供应商查询 供应商修改 客户查询 客户修改 充值 等等等等 基本上所有方法都聚在一个类了
  /// <summary>
        /// 主站GO
        /// </summary>
        /// <param name="kind"></param>
        /// <param name="pars"></param>
        /// <returns></returns>
        private static string Go0(string kind, params object[] pars)
        {
            Console.WriteLine("0" + kind);
            DateTime  dStart = DateTime.Now;
 
     
            string back = "";
            Stream smback = new MemoryStream();
            w78.Data78SvcClient dc = new w78.Data78SvcClient();
            try
            {
                smback = dc.Go(kind, sid0, cid, pars);
                using (MemoryStream ms = new MemoryStream())
                {
                    smback.CopyTo(ms);
                    back = Encoding.UTF8.GetString(ms.ToArray());
                }
            }
            catch 
            {
                Line = -1;
                Login(Uname, sPwd);
                return "连接失败";
            }
        
            try
            {
                if (dc.State != System.ServiceModel.CommunicationState.Faulted)
                    dc.Close();
            }
            catch
            {
                dc.Abort();
            }
           DateTime   dEnd = DateTime.Now;

           double iLast = (dEnd.Ticks - dStart.Ticks) / 10000000;
            if (iLast >= 2)
               Console.WriteLine("超时" + iLast.ToString());
            return back;
        }
rtdb 2013-11-01
  • 打赏
  • 举报
回复
我很喜欢这种接口模式,它其实是类似于提供了一个通信接口, 可以保持稳定,不需要随业务逻辑而变化。 当然调用它时不舒服,因为要知道每个指令名,以及该指令的数据格式。 所以可以在客户端提供指令封装,以方便使用, 例如: void Login(string userid, string pass) { callwebService.Go("login", paras); }
www7788softcom 2013-11-01
  • 打赏
  • 举报
回复
难道只能开放500个方法 每次修改代码就得修改接口 然后重新编译客户端和服务器端? 这是服务不是C#程序好不好 哪有什么循环
  • 打赏
  • 举报
回复
最好要深入一些——等以后——再“简化”。 对于初学者,肤浅和实用往往是难以区分的。这时候你最好,允许多种风格的实现并存,也就是你的所谓“一个类型有所有服务”跟别人的“多个服务独立开发”相并存。而不要愤青地非要坚持只能有一种风格的代码。
  • 打赏
  • 举报
回复
引用 楼主 billhzb 的回复:
webservice仅开放唯一接口 传入方法名和参数调用服务器端方法
你要是仅仅允许人家的c#程序中只能有一个方法,那么任何人的程序都是一个巨大的大杂烩、巨大的垃圾循环、巨大的.......(在此省略5000字) 同样道理。假设一个淘宝api需要有500个服务,你凭什么非要人家只弄成一个?从500个改成一个,我认为不是什么“简化”,反而是因为“洁癖”而过分了。
Andy__Huang 2013-11-01
  • 打赏
  • 举报
回复
改为多个接口,多个服务不行吗?是谁限制开放唯一接口不是胡闹吗
www7788softcom 2013-11-01
  • 打赏
  • 举报
回复
顶..........

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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