【发布时间】:2011-04-10 21:37:08
【问题描述】:
我正在创建我的第一个更大的 ASP.NET MVC 应用程序。在思考了一段时间的应用架构之后,我想我会听到一些其他的意见。
我正在为我的数据层使用 LINQ-SQL。但是,我不打算在整个应用程序中使用 LINQ 对象,因为我希望某些字段有一些更具体的数据类型(例如,我希望 Url 字段是 System.Uri 类型,而不是 System.String)。似乎传递 LINQ 对象也不是一个好主意,因为 DataContext 可能并不总是可用。我绝对希望在这方面有一些 cmets。
我创建了一些更具体的对象来表示我的数据。 LINQ 对象可以解析为这些对象,我创建了一些 DataClient 类,它们利用 LINQ DataContext 检索数据,然后将其解析为我的自定义对象并返回。这允许仅将 LINQ-SQL 用作数据层。
现在想到一个并发症。如何更新数据库中的对象值。我仍在争论是否使用我的自定义对象(因此需要相关属性具有设置器)作为更新方法的参数。如果我采用这种方法,我计划将 Id : int 属性设为可为空的类型,并且只有在将 LINQ 数据对象解析为自定义对象时才能设置 Id 属性。我认为这是有道理的,因为数据库是唯一实际分配标识符的地方。
这种方法不会让我在没有先从数据库中检索记录的情况下更新记录,即使我知道 ID。另一方面,我可以制作将每个字段作为参数的更新方法。但是,这似乎是很多双重代码。
现在是 MVC 模型。我不确定是否直接在视图中使用我的自定义对象,或者是否创建同一对象的另一个表示以在 ViewModel 中使用。最初我认为使用相同的对象会很好,但随后问题开始出现。如果视图需要模型的其他功能怎么办(即,如果我希望视图呈现由控制器控制但不依赖于数据模型的东西怎么办。控制器如何告诉视图做什么?)?此外,我非常想使用 DataAnnotations 命名空间中可用的 DisplayName 和验证属性。如果我想本地化这些数据,我会将资源放在哪里(自定义数据对象不会与网站在同一个程序集中)另外,我希望能够在其他(非 Web)应用程序中使用这些对象?
我非常期待听到您的 cmets。
【问题讨论】:
标签: .net asp.net-mvc linq architecture