我的结构与下面的结构相似
基础课程
public class BaseClass
{
public string Name { get; set; }
public string Address { get; set; }
public int Age { get; set; }
public Guid Guid { get; set; }
public string Hometown { get; set; }
}
派生类
public class DerivedClass : BaseClass
{
public List<DerivedClassDataItem> Data { get; set; }
}
数据类
public class DerivedClassDataItem
{
public string Datum1 { get; set; }
public string Datum2 { get; set; }
public string Datum3 { get; set; }
public string Datum4 { get; set; }
public int Datum5 { get; set; }
public DateTime Datum6 { get; set; }
}
从DerivedClass
返回特定信息集的最佳做法是什么?
潜在的一组可能是:
Name
,Address
,Guid
以及仅包含Data
和Datum1
Datum4
列表
我可以看到anonymousTypes
,Tuples
或另一组class(es)
,这些都是有效的方法。
我关于为返回的集合创建新类的关注是,类(s)结构将类似于上面提到的三个结构,除了它将有更少的选定成员,对我来说,这听起来并不理想。 (重复的代码和结构)
使用anonymousTypes
是解决此问题的初始解决方案,例如
List<DerivedClass> list = new List<DerivedClass>();
var mySet = list.Select(d => new
{
Name = d.Name,
Address = d.Address,
.
.
.
.
.
Data = d.Data.Select(item => new
{
Datum1 = item.Datum1,
Datum4 = item.Datum4
})
});
但是,我们很难跟踪httpResponse
和API调用。
我应该选择Tuple
吗?
有关这样做的最佳做法的任何见解?
修改
我使用这组数据作为API/GET
调用返回的响应。我将使用HttpRespose
发送回来,然后框架会将其转换为json
这是我们现在的实际方法
private void populateReturnFile()
{
var returnFileAnonymous = new
{
Vendor = this.Vendor,
OrganizationName = this.OrganizationName,
User = this.User,
Platform = this.Platform,
DictionaryType = this.DictionaryType,
UseCaseId = this.UseCaseId,
Data = this.Data.Select(d => new
{
MigrationTermId = d.MigrationTermId,
ImoLexicalCode = d.ImoLexicalCode
})
};
this.returnFile = returnFileAnonymous;
}
然后我的GET
会返回retunFile
(这是一个非常简单的方法,我删除了不相关的代码)
[HttpGet]
public HttpResponseMessage Get(Guid migrationFileId)
{
ProblemList problemList = ProblemList.GetProblemList(migrationFileId);
return Request.CreateResponse(HttpStatusCode.OK, problemList.ReturnFile, new JsonMediaTypeFormatter());
}
答案 0 :(得分:2)
如果API调用是您使用这些类的地方,那么我个人希望保持简单并避免复杂的继承层次结构。请记住,简单的代码是很好的代码。
我会为每个api请求/响应调用创建一个单独的类。对于非常简单的api调用(例如ajax请求),我喜欢使用匿名类型,但对于只处理API调用的控制器,我喜欢创建单独的类,组织在一个漂亮的文件夹结构中。
每个人都有自己的“风格”,但只要您努力简化,您的代码就可以维护。