使用 EF6、域、DTO、ViewModel 的多层应用程序中对象的命名约定
Naming convention for objects in multi-layer application with EF6, domain, DTO, ViewModel
我正在开始一个具有多层和多种客户端类型(WebApp、WebAPI、Xamarin 和 Windows)的新项目。我想试试 "Clean Architecture".
我以前的应用程序没有应用层,我的视图模型直接与Entity Framework DbContext
耦合。我在 ASP.NET 和网络开发方面的经验也很少。
是的,这是一个类似于这些的问题:
File naming convention for layers
但我不是在问如何组织我的架构,更多的是关于在一个文件中使用来自不同层的具有相同 class 名称的对象,或者最终改变我的约定以在域中使用 UserBO
命名例如图层。
问题
所以,在 Persistence 层中,我有一个名为 "User" 的 POCO class。
namespace Persistence.Entities
{
public class User
{
// (...)
}
}
在域层我也有 class 称为 "User"。
namespace Domain.Entities
{
public class User
{
// (...)
}
}
在 Windows 和 Android 客户端中,我将创建 ViewModel,但我可以将其命名为 "UserVM",这不是问题。在WebAPI中会有"UserDTO",所以也没有问题。但是在应用层我想创建一些使用两个同名的classes的方法:
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.User
和Domain.Entities.User
。
我该怎么做才能解决这个问题?
到目前为止我发现,我可以在 C# 中为 using
使用别名,如下所示:
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)。这是正确的吗?很抱歉,如果这是一个愚蠢的问题,但正如我所写 - 我没有开发那么多层的经验。
我认为我要做的最后一件事是为我的数据库实体命名更改,因为表比域对象多得多,因此名称尽可能短在持久层比在域层更有用。
简短回答:我将我的业务层称为“服务”,因此围绕用户对象提供服务的服务我将称为 UserService。您从 business/service 层实例化的对象不是“一个”用户,而是一个 UserBO 或 UserService。我实际上将 model/DTO 对象称为 User、UserModel 或 UserDTO。我不喜欢像 BO 这样的缩写,而且我也喜欢 Service 的措辞,所以这是我的偏好。 YMMV :-)
我正在开始一个具有多层和多种客户端类型(WebApp、WebAPI、Xamarin 和 Windows)的新项目。我想试试 "Clean Architecture".
我以前的应用程序没有应用层,我的视图模型直接与Entity Framework DbContext
耦合。我在 ASP.NET 和网络开发方面的经验也很少。
是的,这是一个类似于这些的问题:
File naming convention for layers
但我不是在问如何组织我的架构,更多的是关于在一个文件中使用来自不同层的具有相同 class 名称的对象,或者最终改变我的约定以在域中使用 UserBO
命名例如图层。
问题
所以,在 Persistence 层中,我有一个名为 "User" 的 POCO class。
namespace Persistence.Entities
{
public class User
{
// (...)
}
}
在域层我也有 class 称为 "User"。
namespace Domain.Entities
{
public class User
{
// (...)
}
}
在 Windows 和 Android 客户端中,我将创建 ViewModel,但我可以将其命名为 "UserVM",这不是问题。在WebAPI中会有"UserDTO",所以也没有问题。但是在应用层我想创建一些使用两个同名的classes的方法:
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.User
和Domain.Entities.User
。
我该怎么做才能解决这个问题?
到目前为止我发现,我可以在 C# 中为 using
使用别名,如下所示:
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)。这是正确的吗?很抱歉,如果这是一个愚蠢的问题,但正如我所写 - 我没有开发那么多层的经验。
我认为我要做的最后一件事是为我的数据库实体命名更改,因为表比域对象多得多,因此名称尽可能短在持久层比在域层更有用。
简短回答:我将我的业务层称为“服务”,因此围绕用户对象提供服务的服务我将称为 UserService。您从 business/service 层实例化的对象不是“一个”用户,而是一个 UserBO 或 UserService。我实际上将 model/DTO 对象称为 User、UserModel 或 UserDTO。我不喜欢像 BO 这样的缩写,而且我也喜欢 Service 的措辞,所以这是我的偏好。 YMMV :-)