如何从类

时间:2015-07-24 15:01:06

标签: c# architecture class-design best-fit

我的结构与下面的结构相似

基础课程

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返回特定信息集的最佳做法是什么? 潜在的一组可能是: NameAddressGuid以及仅包含DataDatum1

Datum4列表

我可以看到anonymousTypesTuples或另一组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());
}

1 个答案:

答案 0 :(得分:2)

如果API调用是您使用这些类的地方,那么我个人希望保持简单并避免复杂的继承层次结构。请记住,简单的代码是很好的代码。

我会为每个api请求/响应调用创建一个单独的类。对于非常简单的api调用(例如ajax请求),我喜欢使用匿名类型,但对于只处理API调用的控制器,我喜欢创建单独的类,组织在一个漂亮的文件夹结构中。

每个人都有自己的“风格”,但只要您努力简化,您的代码就可以维护。