实现通用Web服务的想法

时间:2012-12-29 12:20:34

标签: c# generic-programming

我正在考虑一个中/大型项目,它需要存储不同的数据类型并将它们呈现给不同的客户。

我现在正在努力的是,如何构建一个能够存储不同类型对象并在需要时查询它们的数据和服务层。

作为一个例子,想想一个客户端 - 服务器应用程序,其中客户端只能读取每个服务器的广播,现在想到一个场景,花店和餐馆用智能的方式向街道上的人广播他们的数据电话。

class SoCalledServer
{
    public AccessibleClientData Broadcast(ClientData broadcastMessage)
    {
        Broadcast(broadcastMessage)
    }
}

class RestaurantClient : AbstractClient
{
    public SomeGenericDataType menu;
    public RestaurantClient()
    {
        menu = new SomeGenericDataType<List>();
        menu.Add("Sushi");
        menu.Add("Fried potatoes");
    }

    public override void BeginBroadcast()
    {
        server.Broadcast(menu);
    }
}

class FlowerShopClient : AbstractClient
{
    public SomeGenericDataType flowersOnSale;
    public FlowerShopClient()
    {
        flowersOnSale = new SomeGenericDataType<List>();
        flowersOnSale.Add("Daisy");
        flowersOnSale.Add("Rose");
    }

    public void BeginBroadcast()
    {
        server.Broadcast(flowersOnSale);
    }
}

在这个例子中,我有两种不同类型的数据(一种是餐馆的菜单,另一种是花店的鲜花),它们可以有不同的成员(例如菜单有价格和成分,花店的数据有花名和描述,数量和/或价格等......)和“客户”样本可以延长。

我应该如何建模这种类型的应用程序?我应该使用什么样的数据库模式来存储未识别的和各种类型的数据?我的服务器和客户端应用程序应该如何相互通信?最重要的是客户端应如何获取广播数据类型(来自通用类型)?

2 个答案:

答案 0 :(得分:1)

此服务如何操作此数据?它会保存吗?它会用这些数据进行一些计算吗?您的描述过于通用。

假设您只想写/持久/读取数据,您可以简单地保存字符串并让客户端自己进行解析。您可以根据ID进行查询。键/值和文档数据库的工作方式如下。

除此之外,您应该考虑服务的责任,并相应地设计内部结构。

答案 1 :(得分:1)

另一个想法是将它们/序列化为XML或Json。一些提示:

        // get stuff here
        String json = GetJsonString(expression));

        List<T> result;
        using (var ms = new MemoryStream(Encoding.Unicode.GetBytes(json)))
        {
            var serializer = new DataContractJsonSerializer(typeof(List<T>));
            result = (List<T>)serializer.ReadObject(ms);
        }   

或XML: http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.aspx

您可以将对象转换为XML / Json进行传输。然后,为了存储,将它们反序列化为类未知的一侧的匿名对象(没有指定的类)。

通过这种方式,即使类未知,您也始终可以存储所有数据。无处不在。