Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用LINQ到SQL的.NET体系结构的最佳设计实践(需要DAL吗?我们真的可以采用POCOs设计模式吗?)_C#_.net_Linq To Sql_Design Patterns_Architecture - Fatal编程技术网

C# 使用LINQ到SQL的.NET体系结构的最佳设计实践(需要DAL吗?我们真的可以采用POCOs设计模式吗?)

C# 使用LINQ到SQL的.NET体系结构的最佳设计实践(需要DAL吗?我们真的可以采用POCOs设计模式吗?),c#,.net,linq-to-sql,design-patterns,architecture,C#,.net,Linq To Sql,Design Patterns,Architecture,我一直在避免在.NETARCH/n层体系结构上写看起来像是另一个线程的东西,但请容忍我 一、 希望像其他人一样,在选择用于企业应用程序的体系结构时,考虑到当今的趋势和新出现的技术,我仍然没有100%满意或清楚地了解最佳方法 我想我正在征求广大社区对您在使用当今.NET技术的大多数方面构建企业应用程序时所选择的方向和体系结构实现的意见,以及您将采取的方向。我最好把我和我的问题说出来,否则就太模糊了;我想改进我的体系结构来改进,并且非常想听听大家对我即将编写的技术列表的看法 欢迎您提出任何和所有最佳

我一直在避免在.NETARCH/n层体系结构上写看起来像是另一个线程的东西,但请容忍我

一、 希望像其他人一样,在选择用于企业应用程序的体系结构时,考虑到当今的趋势和新出现的技术,我仍然没有100%满意或清楚地了解最佳方法

我想我正在征求广大社区对您在使用当今.NET技术的大多数方面构建企业应用程序时所选择的方向和体系结构实现的意见,以及您将采取的方向。我最好把我和我的问题说出来,否则就太模糊了;我想改进我的体系结构来改进,并且非常想听听大家对我即将编写的技术列表的看法

欢迎您提出任何和所有最佳实践和体系结构模式,如果您以前为类似类型的设置创建过解决方案,那么您可能遇到或克服了任何陷阱或警告

下面是我最新项目中采用的技术列表,是的,除了WPF,几乎所有的技术都采用了:)

  • 智能客户端(WinForms)
  • 周转基金
    • 由智能客户端使用
  • ASP.NETMVC
    • 管理工具
    • 客户端工具
  • LINQ到SQL
    • 由WCF使用
    • 使用ASP.NETMVC
  • Microsoft SQL Server 2008
要考虑的实用程序和其他组件:

  • 依赖注入-结构映射
  • 异常管理-自定义
  • 单元测试-MBUnit
我现在有一个n层拱门。采用基于服务的设计模式,利用请求/响应(不确定它的正式名称)和存储库模式,我的大部分结构都是从

我想我对我的大多数级别都或多或少感到满意(实际上,我对DAL有点不安)

在我结束之前,以下是我在当前架构中面临的真正问题:

  • 如果使用LINQtoSQL,是否应该有一个自定义数据访问层,这是一个很大的疑问。我应该在我的服务/业务层中直接执行LINQ to SQL,还是在存储库方法中的DAL中执行LINQ to SQL?是否应该在每个存储库方法调用中创建数据库上下文的新实例(使用())?还是类构造函数中的一个/通过DI

  • 您认为在使用LINQ to SQL时,我们真的可以使用POCO(普通的旧CLR对象)吗?我希望看到一些例子,因为我遇到了一些问题,这将是特别方便的WCF工作,因为我显然不能携带L2S的对象跨越电线

  • 通过在视图中保留视图逻辑、控制器调用服务/业务方法,当然还有模型中的数据访问,创建ASP.NET MVC项目本身可以非常清楚地显示您应该采用的设计模式,但是对于较大的项目,尤其是共享数据访问的项目,您会放弃“模型”方面吗,您将采取什么方法获取数据

谢谢你听我说,我希望看到基于架构的示例代码,以及它是如何分割的。正如我所说,我已经看到店面,我还没有真正通过Oxite,但只是认为这将有利于我自己和每个人


在DAL要点中添加了附加问题。/15:42 GMT+10

当我看到Rob Connery的店面时,他似乎在使用POCOs和Linq来编写SQL;然而,他正在通过将Linq转换为SQL创建的实体转换为POCO(并返回),这对我来说似乎有点愚蠢——本质上我们用DAL来表示DAL

然而,这似乎是将POCOs与LINQtoSQL结合使用的唯一方法


我想说的是,您应该使用存储库模式,让它隐藏您的Linq到SQL层(或者您最终用于数据访问的任何层)。这并不意味着您不能在其他层中使用Linq,只需确保您的存储库返回IQueryable即可。

回答您的问题:

  • 我应该直接在我的服务/业务层中执行LINQ to SQL,还是在存储库方法中的DAL中执行LINQ to SQL?只有当数据库与业务对象一一对应时,LINQ to SQL才有意义。在大多数企业情况下,情况并非如此,这更合适

    话虽如此,LINQ通常非常适合直接在您的业务层中使用,因为LINQ提供者(无论是LINQtoSQL还是其他)是您的DAL。LINQ的好处是,它允许您在业务层比
    DAL.GetBusinessEntityById(id)
    更灵活、更具表现力,但使LINQ和传统DAL代码都能工作的接近金属的代码被封装在远离您的地方,具有相同的积极效果

  • 当使用LINQ to SQL时,您认为我们真的可以使用POCO(普通的旧CLR对象)吗?如果没有关于LINQ to SQL的POCO问题的更多具体信息,很难说

  • 您是否愿意放弃大型项目的“模型”方面一般来说,MVC模式比ASP.NET MVC的肤浅印象要广泛得多。根据定义,无论您选择使用什么连接到应用程序中的数据备份,都将成为您的模型。如果这是利用WCF或MQ连接到企业数据云,那么就这样吧


无论您是否使用LINQ to SQL,对于WCF之类的东西,通常都需要使用单独的DTO对象。我在这里引用了一些关于这个主题的想法:-但对我来说,最大的想法是:不要在存储库界面上公开
IQueryable
/
Expression
。如果您这样做了,您的存储库就不再是一个黑盒子,也无法单独测试,因为它是cal一时兴起的