繁体   English   中英

业务逻辑方法在使用带有Visual Studio 2015的实体框架6的分层应用程序中的位置

[英]Where do business logic methods go in a layered application using entity framework 6 with Visual Studio 2015

我将Visual Studio 2015与Entity Framework 6和.NET 4.5.2。 我正在构建一个WinForms应用程序。 我以分层的方式构造了我的应用程序,如下所示:

解决方案名称是TrackingSystem。

解决方案下的项目是:

  • TrackingSystem.UI(取决于域层)
  • TrackingSystem.Domain(取决于DAL)
  • TrackingSystem.DomainClasses(无依赖项)
  • TrackingSystem.DAL(无依赖项)

TrackingSystem.DomainClasses项目包含从Entity Framework Power Tools加载项生成的几个类定义。 这些是简单明了的POCO样式文件。 只是每个域实体的类​​名和属性。 例:

Public class Location
{
  int locationId {get;set;}
  string businessName {get;set;}
  string cityLoc {get;set;}
  string stateLoc {get;set}
  string zipCodeLoc {get;set;}
}

我在TrackingSystem.UI项目中引用TrackingSystem.DomainClasses项目,并将其包含在WinForms代码区域的using语句中。 我以这种方式设置它,因此我不会在域层中公开所有类和方法。

我现在的问题是对各个实体的请求的放置。 例如,假设我要添加一个请求,如下所示:

public List<Location> getAllLocations();  

我不想将其添加到TrackingSystem.DomainClasses项目的Location类中,因为这些类将是简单的POCO。

由于这是域在询问DAL之后会提供的东西,因此我希望它位于TrackingSystem.Domain项目下的类中。 这是我不确定如何进行的地方。 我可以在TrackingSystem.Domain项目下创建一个称为Location的类,但随后在解决方案中将有一个重复的类名。 因此,也许我可以将其命名为LocationServices,以便在其中添加与Location实体相关的请求。 如果执行此操作,则不确定是否应该将其放在TrackingSystem.Domain项目的根目录下,或者放在名为DomainEntityServices的文件夹下。 无论我放在哪里,都将为与其他类(即ProductServices)相关的请求创建类似的类。

在这里,我将对一些想法提出疑问,这些想法是关于其他想法可能是如何设置的,或者是否有一些指导性文件可以解决如何为分层解决方案设置Visual Studio项目的问题。 提前致谢。

更新的描述11/21/2015 7:11 AM我找到了一个示例项目,该示例显示了在项目中放置POCO和实现代码的一种情况。 在这种情况下,POCO和BLL在不同的项目中,但是它们保留了相同的实体名称。 在这种情况下,POCOs项目和BLL项目中存在一个Customer.cs文件,其中BLL项目包含实现,而POCO项目仅包含POCO内容。 示例项目位于以下URL:

https://code.msdn.microsoft.com/Multilayered-Architecture-703a0d69

更新的描述11/20/2015 1:36 PM特别是,我正在寻找可以在不询问DAL的情况下在域中回答所请求的服务的方法,例如以下业务规则:城市必须是San Bernardino。 在这种情况下,该规则检查应放在域中的哪个位置,而无需使用DAL进行检查? 我是否创建了一个新类(如LocationServices),该类具有检查该规则的逻辑,如果这样,考虑到我的项目已经在哪里,该类将放在Visual Studio项目中的什么位置?

在这种情况下,我将在域中有一个接口

public interface IAmALocationsRepository 
{
   List<Location> getAllLocations(); 
}

在您的域中,您将使用此界面。

在您的DAL中实施

public class LocationsRepository : IAmALocationsRepository 
{
   public List<Location> getAllLocations()
   {
     //do things here
   }
}

这样一来,您的网域便可以列出我可以使用的位置列表,但我不在乎它的来源。

并且您的DAL提供了列表,而域却不知道。

暂无
暂无

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

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