Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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# 基于web服务的.net应用程序体系结构_C#_.net_Architecture - Fatal编程技术网

C# 基于web服务的.net应用程序体系结构

C# 基于web服务的.net应用程序体系结构,c#,.net,architecture,C#,.net,Architecture,我只是需要一点帮助来组织我的代码。这不是哲学,而是真正的问题。我正在寻找一个有效的解决方案。例如,在php和symfony框架中,如何组织代码是非常清楚的。在c#net中,我感到迷茫。 我只是想重新编写我的项目,重用一些部分 说明 首先,由于我的目标是许多平台windows mobile、windows desktop、android和web,我似乎应该将功能公开为web服务,而不是直接与数据库通信。这是正确的吗? 然后我需要一些客户端应用程序。wpf one、android和windows m

我只是需要一点帮助来组织我的代码。这不是哲学,而是真正的问题。我正在寻找一个有效的解决方案。例如,在php和symfony框架中,如何组织代码是非常清楚的。在c#net中,我感到迷茫。
我只是想重新编写我的项目,重用一些部分

说明
首先,由于我的目标是许多平台windows mobile、windows desktop、android和web,我似乎应该将功能公开为web服务,而不是直接与数据库通信。这是正确的吗?
然后我需要一些客户端应用程序。wpf one、android和windows mobile

在wpf中,我想我可以使用MVVM模式

问题
我将postgresql与ADO.NET结合使用,与其他类似的应用程序相比,其性能是惊人的。我发现这会有很大帮助,这是我一直在寻找的东西。但是,我在将sql代码放在哪里时遇到了问题。好的,我有模型课。。像顾客、订单等。。。那么我应该把sql代码放在哪里呢?我应该把CRUD代码放在单独的类中吗?目前,我在控制器类中有一些代码,但当我想做一些事情时,我总是构造一个新的控制器类。这看起来并不太好。

有什么模式可以组织数据库代码吗?

您可能需要考虑使用业务逻辑层、数据访问层和用户界面的N层应用程序。更多详情:

我会这样做,并通过DAL(数据访问层)访问所有存储过程或SQL代码(或LINQ To/EF)

但是,如果您使用的是web服务(我想您只有UI和BL层),那么这可能不是必需的——只需调用web服务并对结果执行您需要执行的操作即可

因此,您的应用程序将仅限于UI和BL。BL调用webservice(与您拥有DAL时调用DAL的方式相同),检索数据并执行它需要执行的操作


只有当BL处理请求/响应并与DAL通信以将数据传递回应用程序时,您的Web服务才是BL和DAL。

您可能需要考虑使用业务逻辑层、数据访问层和用户界面的N层应用程序。更多详情:

我会这样做,并通过DAL(数据访问层)访问所有存储过程或SQL代码(或LINQ To/EF)

但是,如果您使用的是web服务(我想您只有UI和BL层),那么这可能不是必需的——只需调用web服务并对结果执行您需要执行的操作即可

因此,您的应用程序将仅限于UI和BL。BL调用webservice(与您拥有DAL时调用DAL的方式相同),检索数据并执行它需要执行的操作

只有当BL处理请求/响应并与DAL通信以将数据传递回应用程序时,您的Web服务才是BL和DAL

我应该把sql代码放在哪里,我应该把CRUD代码放在 单独上课

是的,请查看-您的数据代码应该是单独的,并返回对象,例如
Customer
。或者可以提供合适的功能,并且是行业标准

你也可以在上面放一个,从你的多个前端调用

确保在层之间使用,以减少紧密耦合,我现在很喜欢,但有很多好的框架

顺便说一下,您也可以在MVC中使用MVVM模式

我应该把sql代码放在哪里,我应该把CRUD代码放在 单独上课

是的,请查看-您的数据代码应该是单独的,并返回对象,例如
Customer
。或者可以提供合适的功能,并且是行业标准

你也可以在上面放一个,从你的多个前端调用

确保在层之间使用,以减少紧密耦合,我现在很喜欢,但有很多好的框架


顺便说一句,您也可以在MVC中使用MVVM模式。

后端部件需要提供以下功能:

  • 与客户端一起操作:处理客户端的请求并将响应发送回客户端。这里的主要问题是定义请求/响应格式。例如,您可以使用SOAP或REST,.NETFramework服务框架(如WCF)同时使用这两种协议,但对我来说,它更面向SOAP。WCF使用类集合来描述服务契约,所以我认为最好使用一些实体,而不是纯ADO.NET

  • 通知客户端错误:包括验证错误和异常。验证消息需要显示在客户机上,通常按属性名称显示,也应处理异常。此外,在处理与数据库相关的错误并将其转换为域模型错误方面也存在问题

  • 基于
    服务的WCF体系结构
    ——它是通过一组协议访问的契约及其实现。由于WCF使用实体序列化和反序列化,所以对我来说,将任何业务逻辑放在实体中都不是一个好主意。将它放在单独的类(
    存储库
    )中,并从您的服务调用存储库。它被称为
    贫血域模型
    -域实体不包含任何业务逻辑-与
    富域模型相反
    -实体包含业务逻辑

  • 对数据库的访问通常封装到一组称为数据访问层(或DAL)的类中。DAL提供了将实体持久化到数据库或从数据库加载实体所需的一组方法。该方法不应该包含任何业务逻辑,而是从业务逻辑层封装数据库细节和结构。为了实现这一层,经常使用的辅助工具:如ORM(实体框架、BLToolkit等)

  • 业务逻辑层(BLL)-使用DAL中的方法来持久化