繁体   English   中英

具有 EF6、域、DTO、ViewModel 的多层应用程序中对象的命名约定

[英]Naming convention for objects in multi-layer application with EF6, domain, DTO, ViewModel

我正在启动具有多个层和多个客户端类型(WebApp、WebAPI、Xamarin 和 Windows)的新项目。 我想尝试“清洁架构”。

我以前的应用程序没有应用程序层,我的视图模型直接与 Entity Framework DbContext耦合。 我对 ASP.NET 和 Web 开发的经验也很少。

是的,这是一个类似于这些的问题:

多层应用中模型的命名约定

图层的文件命名约定

但我不是在问如何组织我的架构,更多的是关于在一个文件中使用来自不同层的具有相同类名的对象,或者最终改变我的约定,例如在域层中使用UserBO命名。

问题

因此,在持久层中,我有一个名为“User”的 POCO 类。

namespace Persistence.Entities
{
    public class User
    {
        // (...)
    }
}

在域层中,我还有一个名为“用户”的类。

namespace Domain.Entities
{
    public class User
    {
        // (...)
    }
}

在 Windows 和 Android 客户端中,我将创建 ViewModel,但我可以将其命名为“UserVM”,这不是问题。 在 WebAPI 中会有“UserDTO”,所以也没问题。 但是在应用程序层,我想创建一些使用两个同名类的方法:

using System.Collections.Generic;

namespace Application
{
    public class Users
    {
        public List<Domain.Entities.User> GetConnectedUsers()
        {
            List<Persistence.Entities.User> usersFromDb = new List<Persistence.Entities.User>();
            List<Domain.Entities.User> usersToReturn = new List<Domain.Entities.User>();

            // take users from database, make domain objects

            return usersToReturn;
        }
    }
}

我不想在我的应用程序层中编写Persistence.Entities.UserDomain.Entities.User

我能做些什么来处理这个问题?


到目前为止,我想通了,我可以使用别名using在C#这样的:

using Persistence = Persistence.Entities;
using Domain = Domain.Entities;

namespace Application
{
    public class Users
    {
        public List<Domain.User> GetConnectedUsers()
        {
            List<Persistence.User> usersFromDb = new List<Persistence.User>();
            List<Domain.User> usersToReturn = new List<Domain.User>();

            // take users from database, make domain objects

            return usersToReturn;
        }
    }
}

也许有更好的方法来处理这个问题?

或者我应该为我的域层对象添加一些后缀? UserBO (用于 BusinessObject)。 这是正确的吗? 对不起,如果这是一个愚蠢的问题,但正如我所写的 - 我没有那么多层的开发经验。

我认为我要做的最后一件事是为我的数据库实体命名更改,因为表的数量将比域对象多得多,因此在持久层中的名称越短越好,而不是在域层中。

简短回答:我将我的业务层称为“服务”,因此我将围绕 User 对象提供服务的服务称为 UserService。 你从业务/服务层实例化的对象不是“一个”用户,而是一个 UserBO 或 UserService。 模型/DTO 对象我实际上会调用 User、UserModel 或 UserDTO。 我不喜欢像 BO 这样的缩写,但我也喜欢 Service 的措辞,所以这是我的偏好。 YMMV :-)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM