在运行时使用字符串创建T,并且不丢失智能感
本文关键字:智能 运行时 字符串 创建 | 更新日期: 2023-09-27 18:16:52
我有一个客户端/服务器应用程序,其中客户端从服务器请求一些数据。为此,客户端发送一个数据请求,其中包含他希望从中收集数据的对象名称。这是使用Ajax字符串完成的。
在服务器端,我有一个通用的DataManager<T>
类,从数据库获取数据并返回列出的数据,如下所示:
public class DataManager<T> where T : class, new()
{
public List<T> DataManager<T>
{
.... Get list for object T in database using reflection and return the T objects...
}
}
因此,我的服务器代码有以下结构来处理客户端请求:
public class Server
{
public static object GetData(string dataObjectName)
{
switch (dataObjectName)
{
case "ObjA":
var objAManager = new DataManager<ObjA>();
return objAManager.List();
break;
case "ObjB":
var objBManager = new DataManager<ObjB>();
return objBManager.List();
break;
default:
return null;
}
}
}
今天我有两个问题:
a)由于我有不同的DataManager
类和几十个Objs
,我的代码得到了混乱的开关和测试条件。
b)作为服务器返回对象,这也是一个噩梦,因为稍后在服务器脚本中,我需要做一些一致性,我没有智能感知来帮助。
我想用一些技巧来解决这个问题,但我不知道该去哪里。我试着反思,但这样做我仍然失去理智。
有什么标准/方法/实践或模式可以帮助我吗?
为什么不直接定义server为:
//IDataObject is an interface to provide a common contract for all entities used
public static object GetData<T>()
where T: IDataObject
{
var mgr = new DataManager<T>();
return mgr.List();
}
听起来更好的解决方案是实现一个设计模式,比如构建器模式;director找到正确的构建器对象(该对象是用于创建DataManager实例的对象)。或者,找到一种通用所有数据管理器的方法,并集中该逻辑。
棘手的部分是我不知道DataManager做的一切,所以我不能进一步建议。为什么字体的不同会成为决定因素。