使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]

   

使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。

最近项目里遇到了一个问题,为了解决这个问题“动用了”继承、多态还有工厂模式和反射,但是还是没有OO的感觉。呵呵。

先说一下具体情况:
1、使用短信猫来接收短信。简单的说,短信猫收到短信后会往指定的表里面填写数据。
2、接收到短信,然后根据短信前面的“标志”调用不同的方式来处理。
3、发送确认信息或者是错误提示。
4、想做成一个“通用”的模块,不管是什么项目,都可以使用这个程序来处理接收短信的问题。当然具体的处理方式要能很方便的修改或者扩充。


我的实现方式:
1、定义一个基类,用来处理接收到的短信。
2、由于每一种短信的处理方式都不同,所以需要好多的不同的子类。每一个子类来处理一种短信。
3、调用的时候 如果用 case 的方式的话,每增加一总短信都要修改case 。很烦!而且当应用在一个项目里的时候,case 就得推倒重来,烦!
     最后使用了反射。
4、建立了三个项目,一个是winform的用来检查表里面是否有新的短信,叫做A ;一个是处理短信的项目,叫做B;最后一个就是具体的项目了。

==============
说明:
 具体的项目指的是,可能是A公司的OA,可能是B公司的CRM,也可能是C公司的ERP。
 这里说的是分“项目”,而不是分层。
 处理短信的项目要根据不同的公司的不同的需求来编写,写完了之后编译成DLL,交由 A 来调用。
==============

5、其中 A 是通用的,写好了基本不变。B编译成dll,好让A来调用。
6、A 调用处理短信的类。由于使用了反射,可以“动态”的指定dll名称和类名。这样就很灵活了,处理短消息的方式有变化的话,只需要更新dll就可以了。
  换成新的项目的时候,换成新的dll就可以了。这样A就不用改了。


现在基本功能是实现了,但是这样就OO了吗?还是没有OO感觉。

感觉还是在用面向过程的思路来写程序,一个子类里面只有一个函数,和面成过程有什么区别呢?

您可能要问了,那我为什么还要用多态呢?其实很简单,这样就可以使用“反射”了,这样我就不用写case了,可以让A不必随不同的项目而修改了。

说白了就是想当变化的时候少改点代码。

正在看面向对象、设计模式了什么的,把自己的想法、做法写出来,请大家批批。


ps:这里好象用“观察者”更好一点,A就是一个发布者,B是一个订阅者,只是我不知道如何让B来订阅A。
也许根本就不适合吧,毕竟有新的短信了,只有一种处理方法是对应的,其他的都不是。

代码补充:

使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]namespace HBS.SMSReceive
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]{
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]    /**//// 
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]    /// 接收短信。基类
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]    /// 
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]    public class MessageReceive
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]    使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]{
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]        public DataAccessLayer dal ;
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]        
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]        处理短信的函数#region 处理短信的函数
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]        /**//// 
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]        /// 接收短消息然后作相应的处理
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]        /// 
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]        /// 传入手机号
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]        /// 传入收到短信的时间
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]        /// 短信内容
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]        public virtual string SaveMsg(string Mobile ,string RecvDate,string Msg)
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]        使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]{
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]            return "";        //表示正常执行。否则表示出错信息。需要把这个信息发给发送者
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]        }
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]        #endregion
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]        把短信移动到历史记录里面#region 把短信移动到历史记录里面
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]        /**//// 
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]        /// 把短消息从inbox 表中移动到历史记录表里面
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]        /// 
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]        public virtual void LogMsg(string InboxID)
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]        使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]{
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]            //复制记录
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]            string sql = "insert into InBox_Log (mbno,Msg,ArriveTime,Readed,username,comport) select mbno,Msg,ArriveTime,Readed,username,comport from InBox where id= " + InboxID;
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]            dal.RunSql(sql);
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]            //删除记录
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]            dal.RunSql("delete from InBox where id=" + InboxID);
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]        }
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]        #endregion
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]    }
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]    子类1:处理没有标志的短信#region 子类1:处理没有标志的短信
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]    /**//// 
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]    /// 没有标志的短信
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]    /// 
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]    public class MessageOperationOther:MessageReceive
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]    使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]{
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]        public override string SaveMsg(string Mobile ,string RecvDate,string Msg)
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]        使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]{
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]            return "您发的短信我们无法正确识别,请核对后再次发送,谢谢合作!";
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]        }
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]    }
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]    #endregion
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]    子类2:MessageOperation01 第一种短信的回执#region 子类2:MessageOperation01 第一种短信的回执
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]    public class MessageOperation01:MessageReceive
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]    使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]{
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]        public override string SaveMsg(string Mobile ,string RecvDate,string Msg)
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]        使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]{
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]            //处理第一种短信,代码略
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]            return "";
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]        }
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]    }
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]    #endregion
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]}




然后就是A里面的调用的代码

//获取短信内容,放在 DataTable dt 里面
//然后遍历 dt

Assembly.Load("SMS").CreateInstance("SMS.短信" + 短信开头的编号)

代码补充:

使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]处理接收到的短信#region 处理接收到的短信
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]        private void monitorInSMS()
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]        使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]{
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]            string strSQL = "select * from inbox ";    
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]            DataTable dt = dal.RunSqlDataTable(strSQL);
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]            string Mobile = "";            //去掉 86 的手机号
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]            string[] msg = null;        //短信的类型。
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]            string re = "";                //处理短信后的结果。""表示正确执行。
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]            
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]            //遍历短信
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]            foreach (DataRow dr in dt.Rows)
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]            使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]{
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]                Mobile = dr["mbno"].ToString();
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]                if (Mobile.Length > 11)                //去掉前面的86
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]                    Mobile = Mobile.Substring(Mobile.Length - 11,11);
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]                msg = dr["Msg"].ToString().Trim().Split(' ');        //获取短信的标志
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]                
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]                //根据标志加载处理短信的实例,在这里省去了 case 。
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]                msgRecv = (HBS.SMSReceive.MessageReceive)Assembly.Load("HBS.SMSReceive").CreateInstance("HBS.SMSReceive.MessageOperation" + msg[0].Trim());
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]                if (msgRecv == null)
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]                使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]{
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]                    //没有找到对应的分析短消息的类,设置默认选项
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]                    msgRecv = new HBS.SMSReceive.MessageOperationOther();
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]                }
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]                msgRecv.dal = dal;        //设置“数据访问层”的实例
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]                //处理接收到的短消息
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]                re = msgRecv.SaveMsg(Mobile,dr["ArriveTime"].ToString(),dr["Msg"].ToString().Trim().Replace("  "," "));
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]                if (re.Length == 0)
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]                使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]{
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]                    //正确执行,发确认短信。
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]                    msgSend.SendMsg(Mobile,"我们已经收到了您发的短消息,并且保存成功!");
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]                }
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]                else
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]                使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]{
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]                    //没有正确执行,发送错误信息。
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]                    msgSend.SendMsg(Mobile,re);
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]                }
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]                
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]                //移动短信,把短信移动到历史记录里面
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]                msgRecv.LogMsg(dr["ID"].ToString());
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]                
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]            }
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]            
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]        }
使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]        #endregion



大体就是这样了。


反射还是在看了伍迷的小菜系列才会用的,再此表示感谢。



上一篇:AT&T、Sprint、T-Mobile、Verizon用区块链打造移动身份验证平台


下一篇:PC跳YD或互跳 JS