0

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

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

举个例子,考虑一个客户端-服务器应用程序,其中客户端只能读取每个单独的服务器的广播,现在想想花店和餐馆用智能手机向街上的人广播他们的数据的场景。

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);
    }
}

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

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

4

2 回答 2

1

该服务将如何处理这些数据?它只会保存它吗?它会用这些数据做一些计算吗?你的描述太笼统了。

假设您只想写入/保存/读取数据,您可以简单地保存字符串并让客户端自己进行解析。可以根据id查询。键/值和文档数据库就是这样工作的。

更重要的是,您应该考虑服务的职责应该是什么,并相应地设计内部结构。

于 2012-12-29T12:28:16.020 回答
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 进行传输。然后,为了存储,在类未知的一侧将它们反序列化为匿名对象(没有指定的类)。

有了这个,即使类别未知,您也始终可以存储所有数据。无处不在,每时每刻。

于 2012-12-29T12:44:37.110 回答