实现通用web服务的思路

本文关键字:思路 服务 web 实现 | 更新日期: 2023-09-27 17:50:01

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

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

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

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

在这个例子中,我有两种不同类型的数据(一种是餐馆的菜单,另一种是花店的花),它们可以有自己的不同成员(例如:菜单有价格和成分,花店的数据有花的名字和描述,数量和/或价格等),这个"客户端"样本可以扩展。

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

实现通用web服务的思路

这个服务将如何操作这些数据?它只会拯救它吗?它会对这些数据做一些计算吗?你的描述太笼统了。

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

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

另一个想法是将它们反序列化为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进行传输。然后,为了存储,将它们反序列化为未知类的匿名对象(没有指定的类)。

这样,即使类是未知的,您也始终有可能存储所有数据。无处不在,每一次。