using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;namespace ConsoleApplication50
{ //自定义一个消息类
[Serializable]
    class Message
    {
    public string State; //一个标志,代表Message中有用的数据要发往哪个窗体    public DataSet ReturnDataSet()  //for Example,查询服务器数据,返回DataSet给客户端
    {
 
    }
    }
}一个ERP的C/S;
For example
Client:发送比如查询订单.
Server:执行查询订单,序列化Message类,发送给客端
Client:接收数据反序列化,然后根据Message.State,然判断那个窗体需要这些数据,发送给这个窗体。
上面是一个构思而以。是可以实现的.
我想问一下大家都是用什么主法?我想看看我的方法是不是主流方法,还是菜。

解决方案 »

  1.   

    SOS
      

  2.   

    然后根据Message.State,然判断那个窗体需要这些数据,发送给这个窗体。 
    完全不需要这个,而是通过事件来触发的,你不可能知道哪个窗体需要数据,就像观察者所讲的,只定义接口,只定义数据接口和依赖接口,具体谁关心服务器发送过来的数据,你不可能知道,你也没有必要知道;
      

  3.   

    for example
    Switch(Message.State)
    {
    case Form1:
    触发Form1事件
    break;
    case Form2:
    触发Form1事件
    break;
    }
    我的大体思路如上.可行性如何?
      

  4.   

    基本上同意8楼的。前台发起Client端请求,在窗体的操作线程中发起就可以。或许你希望异步地访问服务器,那么事件回调就可以被窗体继续处理返回结果。所以设计没有必要复杂化。我只看到那些对“设计模式”走火入魔的人(相当大学教授的)容易故意复杂化,而产品设计师不会。
      

  5.   


    哪有什么Message.State?哪有什么“Form事件”?看来你既不了解.net的Socket(或者TcpClient)异步编程,也不了解事件机制。两个概念全都正好满拧了。
      

  6.   

    触发Form1事件,你如何触发?难不成你可以调用Form.OnClick()方法?在窗体外是无法直接通过方法触发事件的,除非你为你的form写一个触发事件的接口,即使实现了,你也是复杂化你的代码。。
    如果走野路子,你可以就这样走下去,等知道自己错的时候再回头不晚,如果知道错了还不回头那么就一直走吧
      

  7.   


    问题是,服务器怎么知道客户端Form的名称?而且,仅仅一个string就能区分所有的消息吗?
    再扯远点,通过返回值来得到消息是不够的。你的程序客户端应该不止一个吧?那一个客户端更改了数据怎么通知到其他客户端呢?需要有个后台线程监听或者轮询得到消息,然后通知UI更新。
    服务器要做的,就是在数据更改的操作发生时,生成类似下面的消息,然后通知给客户端。至于客户端怎么处理,那是客户端的事。
        [Serializable]
        public class EntityChangedEventArgs : EventArgs
        {
            public EntityChangeType ChangedType { get; set; }
            public Type EntityType { get; set; }
            public object Entity { get; set; }
        }    [Serializable]
        public enum EntityChangeType
        {
            Add,
            Update,
            Delete,
            ListChanged
        }
      

  8.   


     public class EntityChangedEventArgs : EventArgs
        {
            public EntityChangeType ChangedType { get; set; }
            public Type EntityType { get; set; }
            public object Entity { get; set; }
        }//CSocket类,也就是接收信息用的类public delegate void Msg(EntityChangedEventArgs e);
    //public delegate void Msg(string text);//定义一个委托 接收聊天信息
           public static event Msg myevent1;
    //在主窗体中
     CSocket.myevent1+=new CSocket.Msg(CSocket_myevent1);
     public void CSocket_myevent1(EntityChangedEventArgs e)
            {  
    在这里收到
      e.EntityType 
    ====
              
                
            }
           是否像这样啊。
      

  9.   

    我了解一点点而已,所以才来问,要是会了我何必来这开个贴子啊.
    还有Message是个类我自定义的。事件也是自定义的。
      

  10.   

    你的form写一个触发事件的接口,是很杂,就是杂得很,不对劲了才来这求教。
      

  11.   

    sos
      

  12.   

    参考 IIS HTTP 浏览器