首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有一个类助手来将DAL对象转换为核心对象?

是否有一个类助手来将DAL对象转换为核心对象?
EN

Stack Overflow用户
提问于 2014-04-28 10:32:17
回答 1查看 619关注 0票数 0

我正努力为我目前的项目找到一个好的架构。这是我第一次设计一个严肃的n层应用程序,试图使用软件工程的最佳实践(DI、单元测试等)。我的项目是使用洋葱架构。

我有四层

  1. 核心层:它保存着我的业务对象。在这里,我有代表我的业务实体的类及其方法。其中一些对象具有对服务接口的引用。
  2. DAL (数据访问)层:它定义了POCO对象,并实现了在核心层中定义的存储接口。在这一层中,我认为设计一个大型实用程序类是个好主意,它的作用是将POCOs对象从DAL转换为Core中的Business。
  3. 服务层:它实现在核心中定义的服务接口。该层的作用是提供对DAL中定义的存储库的访问。我主要认为这个层是无用的,所以我直接使用了在我的核心层中定义的存储接口。然而,在花了几周时间编写了非常长的实例化代码之后--让构造函数接受5-6 IRepository参数--我得到了服务层。
  4. 表示层。这里没有什么特别之处,只是我在这个层中配置了依赖项注入(我正在使用Ninject )。

我已经更改了架构,并至少重写了3次代码,因为我多次看到代码有问题。(比如具有长参数列表的长构造函数)。幸运的是,每比特我得到了各种编码模式的点,在文集中发现。

然而,我刚刚遇到了我的DI的周期性依赖,我很想知道我的DAL2Core助手是不是一个好主意.

多亏了这个助手,我才能编写代码,如:

代码语言:javascript
复制
        DAL.Point p = DAL2Core.PointConverter(point); // point is a Core Object
        context.Points.Add(p);
        context.SaveChanges();

这减少了一点代码冗余。然后,我在DAL中定义的每个存储库都有自己的DAL2Core成员:

代码语言:javascript
复制
private IDAL2CoreHelper DAL2Core;

然后从Repository构造函数中注入它。

DAL2Core类本身有点凌乱..。首先,它对每个存储库和每个处理器(服务层)都有一个属性。处理器存在的原因是我的核心对象需要注入处理器依赖项。我在下面的DAL2Core实用程序类中引用了一些存储库和处理器,以说明:

代码语言:javascript
复制
    [Inject]
    private Core.IUserRepository UserRepository{ get; set; }
    [Inject]
    private Core.IPointsRepository PointsRepository { get; set; }


...

    [Inject]
    private Core.IUserProcessor UserProcessor{ get; set; }
    [Inject]
    private Core.IPointsProcessor CoursProcessor { get; set; }

(由于存储库需要DAL2Core助手,构造函数注入将导致周期性依赖)

然后这个类有很多简单的方法,例如:

代码语言:javascript
复制
public Core.User UserConverter(DAL.User u)
    {
        Core.User user = new Core.User(UserProcessor);   
        user.FirstName= u.FirstName;
        user.Name= u.Name;
        user.ID = u.ID;
        user.Phone= u.Phone;
        user.Email= u.Email;
        user.Birthday= u.Birthday;
        user.Photo = u.Photo;
        return user;
    }

这门课大概有600行。考虑到这一点,我意识到我保存的代码并不多,因为很多时候DAL2Core转换代码只是从一个地方调用的,所以最好把这些代码留在存储库中?而且--最大的问题--因为我决定将这个助手从我的Repository类中分离出来,周期性的依赖项异常就会由since抛出。

你对我尝试过的设计有什么看法,这是一种好的/常见的做法吗?以及如何在没有代码气味的情况下聪明有效地执行这个DAL2Core转换。我真的很期待解决这个架构问题,在过去的三个星期里,我一直在处理管道和架构问题,并没有真正推进这个项目。我要迟到了。然而,我真的想要产生一个高质量的代码。我只想避免建筑上的解决方案,在我看来是过分的,有很多工厂等等。但我承认,有时候,这种感觉只是来自于我缺乏理解(比如服务层)。

提前感谢您的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-28 10:35:57

您希望使用的是AutoMapper、值注入器或类似的东西。

从本质上讲,分离层间的数据模型、减少耦合和增加可测试性是一个很好的实践。如果您想出了一个通用Mapper,您将减少代码冗余。

希望这能有所帮助。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23338746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档