0

我创建了一个类库,将 linq 添加到 SQL 类并拖动一些表。创建另一个类库向上述项目添加一个引用并为 GetCustomers 创建一个简短的函数(dim query = from c in customers select c return c.toList)然后我添加一个 Vb .Net Web 应用程序并向第二个类添加一个引用创建库并调用 GetCustomers 方法。我收到一条错误消息,告诉我添加对包含 linq to SQL 数据模型的类的引用,这似乎不正确。

我怎样才能正确分离这些层?我将不胜感激和 Vb .Net 中的文章或任何代码。

谢谢

4

3 回答 3

1

由于数据类是在 Linq to SQL 类库中定义的,因此 Web 应用程序需要对其进行引用才能知道这些类是什么。

要真正分离层,您需要使用 Linq to SQL 类在第二个类库中创建单独的传输对象。

automapper这样的工具在那里真的很有帮助。

于 2012-12-18T22:12:05.563 回答
1

您的 LINQ to SQL 模型需要显式引用才能使用它们。您不能通过另一个参考来推断参考。

解决此问题的一种方法是使用 DTO 和视图模型。

  • 在这种情况下,Web 应用程序调用中间层的存储库
  • 中间层为实体调用数据层
  • 数据层给中间层实体
  • 中间层将实体转换为数据传输对象并将其返回给 Web 应用程序
  • Web 应用程序使用数据传输对象将实体的状态传递给中间层
  • Web 应用程序将 DTO 转换为视图模型以进行演示。

这是一个非常笼统的概述。基本上,每一层对数据的外观都有自己的想法,并与另一层就如何翻译签订了合同。其他人可以比我更好地解释它。是一篇关于 N 层架构的相当不错的文章。

于 2012-12-18T22:17:42.140 回答
0

听起来您的函数可能会将值作为 List(Of Customers) 类型返回 - 在这种情况下,客户类型是在您的第一个类库中定义的。

假设您的项目名为“Data”、“Business”和“UI”,如果您不想让 UI 项目引用 Data 类库,则业务项目将不得不将数据的结果复制或呈现到在业务中定义的表单,以便 UI 可以使用它。否则,即使 UI 最终只针对业务进行调用,UI 也必须仅为类型定义引用 Data。

于 2012-12-18T22:13:22.620 回答