首页 文章 精选 留言 我的

精选列表

搜索[Spring Framework],共10000篇文章
优秀的个人博客,低调大师

《Pro ASP.NET MVC 3 Framework》学习笔记之三【MVC模式介绍】

主题:MVC模式 1.MVC的历史: MVC(model-view-controller)这个概念在20世纪70年代就已经被使用了,MVC是从Smalltalk项目中提出的。所以原始的MVC模式所包含非常好的细节跟Smalltalk项目的具体概念是紧密相关的。我们假定View是无状态的,跟mvc的应用程序的交互遵循这样一个的过程:用户产生行为造成view更新,这刚好跟Web应用程序通过HTTP请求和响应的本质吻合。而且,mvc强调分解关注点的思想--领域模型和控制逻辑跟UI的松耦合,这意味着大量的HTML是可以独立其他部分而存在,这也使得维护和测试更加的简单。当然,这也是Ruby on Rails在mvc里面一直推崇和主张的,也是许多其他的MVC框架吸收和阐释的一个优点,当然也包括了ASP.NET MVC框架。 2.理解MVC模式: Models:控制或呈现用户(users)处理的数据,可以是仅仅用来呈现在View和Controller之间传递数据的view model;也可以是相对复杂的包含在业务领域里面,用来执行操作,传输,处理规则的数据。 Views:作为UI,负责呈现数据给客户端,也就是最终的HTML页 Controllers:处理请求,执行对model的操作,并选择一个View来把model的数据呈现给浏览器或者说是用户。 Models是对整个应用程序所工作的环境的定义,例如在一个银行系统中,model代表了程序支持的所有一切,比如总账,客户的信用额度等等,以及可以用来操控数据的所有操作(诸如,存款和取款的操作),我们也越发知道Models对于整个mvc应用程序的重要性。 Models同样可以从它不负责的那方面来理解,比如它不负责呈现UI和处理各种请求,这些属于Views和Controllers的工作,Views除了负责展示model的成员给用户别无其他的工作,也就是说,Views是不知道Models的存在的,也不会跟Models有任何直接的联系。Controllers才是Views跟Models之间的桥梁,当有来自客户端的请求时,Controllers就会选择一个合适的View来响应用户的请求。 如果有必要,在Models里面也会实现一些必要的操作。可以说,MVC架构的每个部分都得到了很好的定义和划分,这也正是MVC一直贯彻的"分解关注点"的思想:对数据操控的逻辑都包含在Models里面;对数据的展示逻辑都包含在Views里面;处理用户请求和输入的逻辑都包含在Controllers里面。伴随着这样一个非常清晰明确的分工,我们的程序会变得更加容易维护和扩展,甚至是系统非常庞大了以后也一样。 3.理解领域模型(Domain Model) 前面也有说过,MVC里面最重要的部分就是Domain Model(至于什么是Domain Model前面的笔记有过介绍),我们根据应用程序必须支持的行业或者活动中存在的现实世界的实体,操作,以及规则把这些称为领域(Domain),在此基础上来创建Models的。创建的Model也自然可以称为Domain Model。对于用C#开发的人来说,Domain Model就是一套C#类型(类,结构等)的集合,把这些统称为领域类型(Domain Type).通过定义在领域类型里面的方法表示对领域的各种操作,并且领域的规则也表示在了这些方法里面,当我们创建了一个领域类型(Domain Type)的实例时,也就是创建了一个领域对象(Domain Object),领域模型通常是持久化的,当然持久化有很多方式,通常情况下利用关系型数据库。 为了进一步分解ASP.NET MVC应用程序的领域模型,会将model放在不同的C# assembly里面。这样我们就可以从程序的其他部分创建到领域模型(Domain Model)的引用,这对应规模较大的项目尤其有用。 4.ASP.NET的MVC实现 在MVC中,Controllers是C#类,通常继承了System.Web.Mvc.Controller类,每一个公有的方法我们称为Action Method,这些Action方法通过ASP.NET Routing System(路由系统)跟可配置的URL相关联。为了实现一些Domain Model里面的操作,Controllers里面的语句会被执行,之后选择一个View呈现到客户端。下面的图很好的展现了这样一个过程: 从上面的图我们也能清楚的看到,View是不依赖Controller的,也不知道Controller的存在,更加不会发生直接的联系。ASP.NET MVC3提供了一种新的View Engine--Razor,当然以前的aspx视图引擎仍然可以直接用的,在MVC里面,我们可以选择任意的方式去实现Domain Model,而不会有任何的限制。 这里也有传统的三层架构的图解过程,如下所示: 对比一下,我们也能体会MVC架构的一些优点吧。 传统的三层架构也是一个很大的跨越。现在被广泛的应用在了各种业务系统里面,它对应UI的如何实现没有任何限制,不管你是Winform还是Webfrom,或是其他的,都可以应用。在没有太复杂的情况下提供了对关注点的分解。当我们仔细看时,给DAL创建单元测试相对容易些。并且三层架构跟MVC看起来有非常相似的地方,但是MVC跟三层却是完全不同的东西,不要把两者混淆了。按照老赵在MSDN里面的说法(我看过几个相关的MSDN的MVC教程),MVC是一种呈现模式,而三层是一种架构模式。 对应三层:当我们的UI层 耦合了按钮事件以后,会使得自动化的单元测试几乎不可能实现。 5.MVC也有很多的变体,例如:Model-View-Presenter Pattern(MVP模式),Model-View-View Model Pattern(MVVM模式) 今天的笔记先做到这里,明天继续。 我刚学MVC,对于书里面的理解肯定会有错误,请路过的大牛多多指正,谢谢 祝路过的朋友工作顺利! 本文转自Rt-张雪飞博客园博客,原文链接http://www.cnblogs.com/mszhangxuefei/archive/2011/12/03/mvcnotes_3.html如需转载请自行联系原作者 张雪飞

优秀的个人博客,低调大师

[实践] Android5.1.1源码 - 在Framework中添加自定义系统服务

前言 本文的方法要修改Android源码。但只要将系统服务写出来,也可以注入system_server进程将系统服务加载到system_server中。 步骤 1. 添加一个aidl文件,我将aidl文件添加到这个路径下: frameworks/base/core/java/android/content/bw/IBWService.aidl,IBWService.aidl是我的aidl文件。下面是一个例子: 2. 在frameworks/base/Android.mk文件的LOCAL_SRC_FILES中系统添加了很多aidl文件,我们在系统添加的文件列表中添加一行:core/java/android/content/bw/IBWService.aidl 3. 写一个服务文件继承aidl中的Stub类,这个类我添加到了这个路径下: frameworks/base/services/core/java/com/android/server/bw/BWService.java。这里有一个技巧,可以在自己的Android项目中先写一个aidl和一个继承它Stub的类,当代码编写无误时将这两个文件拷贝到Android源码目录中。下面是服务文件的例子: 4. 在SystemServer类中添加我们自定义的系统服务,系统如何添加系统服务可以参考Android5.1.1源码 - 分析Android系统服务何时被添加到ServiceManager这篇文章。下面是添加自定义系统服务的一个例子: 5. 由于Android5.1.1中有SeAndroid系统,这个系统中维护了一个系统服务的白名单,如果你要添加的系统服务不在这个白名单中,那么添加系统服务将会失败,这个白名单的路径是:external/sepolicy/service_contexts。下面是我在这个白名单中添加的一行: bwservice u:object_r:system_server_service:s0 bwservice就是ServiceManager.addService时输入的服务名。 至此添加系统服务成功,重新编译Android源码即可。

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册