关于实体字段取舍的疑惑
如图, 我现在需要设计一个实体, 开放给API和服务接口供调用方调用. 其包含的信息需要供不同的调用方调用. 而且基本上每次都要传输大量的这种东西给不同的调用方(主要是手机端和网站). 所以调用方要求精简字段, 以提高查询效率. 只传输他们有必要使用的字段. 其他字段不能出现在传输体上. 传输形式都一样, XML、JSON等等这不重要, 重要的是在这种情况下我不可能为每一个调用方都单独写一个实体, 一个调用的方法吧? 难道以后增加调用方我还需要再给他建立一个实体? 所以想请教一下各位, 在你们遇到这种事情的时候应该怎么处理? 我该如何设计这个实体以满足不同调用方的需求?需求 JSON 移动端开发 设计 --------------------编程问答-------------------- 可以用Linq,需要哪些字段就返回哪些字段,类似于sql的思想。 --------------------编程问答-------------------- 那就不能以实体返回了,不知你用的什么框架WebAPI、WCF还是其他什么的,应该都有自己的解决方案,根据所传字段按需返回,起码WebAPI是可以实现的! --------------------编程问答--------------------
WebAPI 和 WCF 皆有. 网上搜了一下, 似乎没有谁提到过 "按需返回字段" 这个概念?? 可否详细说一下呢? --------------------编程问答--------------------
Linq? 怎么处理? 我们后台数据层用的是类似于 IBatis 这种的ORM框架, 不是 Entity Framework.
其实我是想如果他不需要这个字段, 我在SQL中压根就不会查询这个字段. 这样查询效率还可以进一步提高.
而且这些字段往往不是从DB出来的, 而是MemoryCache.... --------------------编程问答-------------------- 你应该有自己的接口规范,可以用字符串参数。
或者用动态参数。
字符串参数请求:
GetUser("ID,UserName");
只返回ID,UserName数据即可。 --------------------编程问答--------------------
然后呢? --------------------编程问答--------------------
根据你的要求,大致可封装方法如下:
假定传入的字段为以英文逗号分割的字符串,返回内容以字典为例,model为你定义的相关实体对象
public static Dictionary<string, object> StringFields<T>(T model, string fields) where T : class
{
Dictionary<string, object> dic = new Dictionary<string, object>();
if (model != null)
{
string[] arrFields = { };
if (!string.IsNullOrEmpty(fields))
{
arrFields = fields.Replace(",", ",").Split(',');
}
var strArr = model.GetType().GetProperties();
if (arrFields.Length > 0)
{
foreach (var s in arrFields)
{
var _model = strArr.Where(item => item.Name.ToLower() == s.ToLower()).FirstOrDefault();
if (_model != null)
{
dic.Add(_model.Name, _model.GetValue(model, null) == null ? string.Empty : _model.GetValue(model, null));
}
}
}
else
{
strArr.All(o => { dic.Add(o.Name, o.GetValue(model, null)); return true; });
}
}
return dic;
}
楼主可试试类推之… --------------------编程问答--------------------
然后呢?
然后你根据传入的字段 给相应的实体字段赋值返回就行了。 --------------------编程问答--------------------
那就不能以实体返回了,不知你用的什么框架WebAPI、WCF还是其他什么的,应该都有自己的解决方案,根据所传字段按需返回,起码WebAPI是可以实现的!
WebAPI 和 WCF 皆有. 网上搜了一下, 似乎没有谁提到过 "按需返回字段" 这个概念?? 可否详细说一下呢?
根据你的要求,大致可封装方法如下:
假定传入的字段为以英文逗号分割的字符串,返回内容以字典为例,model为你定义的相关实体对象
public static Dictionary<string, object> StringFields<T>(T model, string fields) where T : class
{
Dictionary<string, object> dic = new Dictionary<string, object>();
if (model != null)
{
string[] arrFields = { };
if (!string.IsNullOrEmpty(fields))
{
arrFields = fields.Replace(",", ",").Split(',');
}
var strArr = model.GetType().GetProperties();
if (arrFields.Length > 0)
{
foreach (var s in arrFields)
{
var _model = strArr.Where(item => item.Name.ToLower() == s.ToLower()).FirstOrDefault();
if (_model != null)
{
dic.Add(_model.Name, _model.GetValue(model, null) == null ? string.Empty : _model.GetValue(model, null));
}
}
}
else
{
strArr.All(o => { dic.Add(o.Name, o.GetValue(model, null)); return true; });
}
}
return dic;
}
楼主可试试类推之…
补充:.NET技术 , ASP.NET