实现通用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);
}
}
在这个例子中,我有两种不同类型的数据(一种是餐馆的菜单,另一种是花店的花),它们可以有自己的不同成员(例如:菜单有价格和成分,花店的数据有花的名字和描述,数量和/或价格等),这个"客户端"样本可以扩展。
我应该如何为这种类型的应用程序建模?应该使用哪种数据库模式来存储未识别的和各种类型的数据?我的服务器和客户端应用程序应该如何相互通信?最重要的是客户端应该如何获得广播的数据类型(从泛型类型)?
这个服务将如何操作这些数据?它只会拯救它吗?它会对这些数据做一些计算吗?你的描述太笼统了。
假设您只想写入/持久化/读取数据,您可以简单地保存字符串并让客户端自己进行解析。可以根据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进行传输。然后,为了存储,将它们反序列化为未知类的匿名对象(没有指定的类)。
这样,即使类是未知的,您也始终有可能存储所有数据。无处不在,每一次。