我在“设计模式”一书中为四人组读过,该框架会影响应用程序的整体架构。现在我知道,例如,当使用 .NET 时,您需要从中继承System.Windows.Form
来制作表单(尽管我认为我在这里有一个很大的误解)。但是任何人都可以使用任何框架在代码中描述该框架如何影响应用程序架构吗?
3 回答
我必须说,一个干净的架构(也是设计模式)不依赖于正在使用的框架、工具包或库。架构描述了软件系统的高级结构(层和层),而不是详细说明它是如何实现的。它是一套原则,可以帮助我们实现一些特定的目标,例如安全性、可用性、可扩展性、可靠性、可维护性、可用性……让我们看一个简单的例子:
模型-视图-控制器 (MVC) 是一种软件架构(或设计模式),它将域的建模、表示和基于用户输入的操作分为三个单独的类。MVC 背后的中心思想是代码可重用性和关注点分离。您可以使用多种编程语言或框架应用 MVC,例如 ASP.Net MVC、Java Strut、PHP DRY、CAKEPHP...。
Wikipedia中有一些关于该主题的有趣注释:
软件框架由冻结点和热点组成。冻结点定义了软件系统的整体架构(...)。这些在应用程序框架的任何实例中都保持不变(冻结)。热点代表使用框架的程序员添加自己的代码的那些部分(...)。
据此,您的应用程序可以由您正在使用的框架定义。例如,在 Java 世界中,使用 Struts 框架意味着您正在使用MVC 架构,或者使用 Spring 框架会强制您应用依赖注入模式。如果软件架构是由软件模式定义的,那么一些框架是供您使用的预构建模式。
另一方面,没有软件应用程序仅由模式/框架制作,有一些热点很有用:它们是软件框架提供的扩展/使用框架功能并根据您的要求和领域构建应用程序的方式.
例如,假设您正在使用Spring MVC Framework构建一个 Web 应用程序。在项目中配置框架后,对应用程序的每个请求都将委托给一个名为DispatcherServlet
. 这个类是内置在框架中的,你不应该修改它,所以它是Frozen Spot的完美示例。将DispatcherServlet
查找您的项目配置并将请求处理委托给Controller
. 这Controller
通常是程序员制作的一个类,负责处理请求。所以你的手工控制器是你扩展框架的热点。
DispatcherServlet 是Front-Controller Pattern的实现,Controller 的使用是 MVC 应用程序的典型;因此,您的应用程序由您使用的框架高度定义。
在不同的框架中传递、存储或评估数据的方式有不同的方法。如果您正在使用 Windows 窗体应用程序,您可以从项目的任何地方访问您的视图元素,因为它们都在计算机的本地内存中,而没有其他地方。
但是,如果您使用的是 ASP.NET 应用程序,则项目、客户端和服务器有不同的方在使用,并且事情会变得更加复杂。您所做的设计与 Forms 几乎没有任何共同之处。
如果您正在使用 ASP.NET MVC 应用程序,则有三层:ModelViewController,操作分为这些层,从现在开始,您需要以适合这些层的方式进行设计。您拥有 MVC 提供的数据库表对象关系,可以完全改变设计。
位于程序下方的编程语言也改变了设计,因为它可以是功能性的、面向对象的等。
简而言之,这不是一个建设性的问题。在使用不同的编程语言和技术后,您将找出这个问题的答案。