基于Monorail的系统功能模块化
模块化总是让人比较容易理解的,如果你的程序可以让人很容易理解,那是多么美好的事情!不论是对自己或是对别人。N层的开发让人看到了模块化的威力,这里不讨论整个系统的结构,而是细分到系统的每个功能,比如说一个网站的功能,可能有会员管理模块,有内容管理模块等等,DNN等一系列cms在这点的实现是很强大的,但是似乎真的“大”了一点。最近看了一些基于插件式的内容管理系统,不免让人觉得有些过度设计的感觉,web本该如此简单,太复杂的架构感觉有点沉重。最近用到Castle的Monorail,发现了一个好玩的东西,说出来分享下,知道的就不要乱拍啦!
首先我有一个简单的网站,里面已经有几个简单的功能了。因为简单,所以就想不断地完善,添加功能,步骤很简单。
看配置文件
<configuration>
<configSections>
<section name="monorail" type="Castle.MonoRail.Framework.Configuration.MonoRailSectionHandler, Castle.MonoRail.Framework" />
</configSections>
<!--
For more on MonoRail configuration see
http://www.castleproject.org/monorail/documentation/v1rc3/index.html
-->
<monorail smtpHost="yoursmtphost" useWindsorIntegration="false">
<controllers>
<assembly>ExPortal</assembly>
<assembly>ControlOther</assembly>
</controllers>
<viewEngines viewPathRoot="Views">
<add xhtml="false" type="Castle.MonoRail.Framework.Views.NVelocity.NVelocityViewEngine, Castle.MonoRail.Framework.Views.NVelocity" />
</viewEngines>
</monorail>
<system.web>
<httpHandlers>
<add verb="*" path="*.castle" type="Castle.MonoRail.Framework.MonoRailHttpHandlerFactory, Castle.MonoRail.Framework" />
<!-- block direct user access to template files -->
<add verb="*" path="*.vm" type="System.Web.HttpForbiddenHandler" />
<add verb="*" path="*.njs" type="System.Web.HttpForbiddenHandler" />
<add verb="*" path="*.brail" type="System.Web.HttpForbiddenHandler" />
<add verb="*" path="*.brailjs" type="System.Web.HttpForbiddenHandler" />
<add verb="*" path="*.st" type="System.Web.HttpForbiddenHandler" />
</httpHandlers>
<httpModules>
<add name="monorail" type="Castle.MonoRail.Framework.EngineContextModule, Castle.MonoRail.Framework" />
</httpModules>
</system.web>
</configuration>
看看Controllers下的子节点,我配置了两个Assembly,ControlOther里面有我新加的功能模块GameController类,下面只是个例子,
using System.Collections.Generic;
using System.Text;
using Castle.MonoRail.Framework;
namespace ControlOther
{
public class GameController:Controller
{
public void index()
{
PropertyBag["name"] = "Awen";
}
}
}
编译,将dll拷贝到web applaction 的bin文件夹里,然后在Web里面views文件夹里面添加vm(view,视图文件)
ok,现在就可以访问game/index.rail了,不信,你试试看吧!
当然,这里添加模块是基于web.config的,我看了源代码,用如下代码可以设置Assemblies。
con.Assemblies = new string[] { "ExPortal", "ControlOther" };
或许可以重写Monorail读取配置的代码,改为以数据库为存储,加以缓存依赖,下次再研究下。不知这样算不算一个可插拔的系统呢?但是好像在运行期改变Controller的Assemblies后也没效果哦,暂时没找到,如果有同学知道,说声咯!
转载于:https://www.cnblogs.com/Ablog-sunny/archive/2008/05/18/1202009.html
基于Monorail的系统功能模块化相关推荐
- TorchSeg—基于PyTorch的快速模块化语义分割开源库
点击我爱计算机视觉标星,更快获取CVML新技术 昨日,语义分割算法DFN.BiSeNet 第一作者ycszen开源了TorchSeg项目,基于PyTorch的快速模块化语义分割开源库,复现了DFN, ...
- 编写自己的模块化php框架,ZTBCMS 基于 ThinkPHP 的高性能 模块化 快速开发框架 - 文章教程...
ZTBCMS 基于 ThinkPHP 的高性能 模块化 快速开发框架,基于 ThinkPHP 框架开发,采用独立分组的方式开发的内容管理系统,支持模块安装/卸载,拥有丰富的扩展模块,同时系统对扩展方面 ...
- 基于Module Federation的模块化跨栈方案探索
公司发展到一定程度,随着业务分支不断变多,B端C端的项目也随之增多,由于历史原因可能产生新老技术栈(vue/react)共存的情况,这既不利于组件物料的抽离统一(一类通用组件需适配多套技术栈),也增大 ...
- 基于Ext JS的模块化应用框架搭建及开发
Ext JS模块化开发 早期基于Ext JS的Web开发方式,是在HTML中引入JS和CSS文件,典型的就是引入 ext-all.js 这样的文件.ext all 包含的内容很多, 有基本的核心组件. ...
- 基于CommonJS谈谈前端模块化
模块化 CMJ 被熟知得益于 Node 社区的炸裂兴起,不过目前 Node 已经转移向了 ESM.不过有兴趣的依然可以研究研究,Node 中的 CMJ 实现 Node 中 CMJ 实现源代码 1.模块 ...
- 蚂蚁金服开源 ——基于 SOFABoot 进行模块化开发
SOFA 中间件是蚂蚁金服自主研发的金融级分布式中间件,包含了构建金融级云原生架构所需的各个组件,包括微服务研发框架,RPC 框架,服务注册中心,分布式定时任务,限流/熔断框架,动态配置推送,分布式链 ...
- 基于Vue和SpringBoot的进销存管理系统的设计和实现
作者主页:Designer 小郑 作者简介:Java全栈软件工程师一枚,来自浙江宁波,负责开发管理公司OA项目,专注软件前后端开发(Vue.SpringBoot和微信小程序).系统定制.远程技术指导. ...
- 基于Andriod的美图软件的设计
资源下载地址:https://download.csdn.net/download/sheziqiong/86156646 资源下载地址:https://download.csdn.net/downl ...
- 基于 TensorFlow 在手机端实现文档检测
手机端运行卷积神经网络的一次实践 - 基于 TensorFlow 和 OpenCV 实现文档检测功能 1. 前言 本文不是神经网络或机器学习的入门教学,而是通过一个真实的产品案例,展示了在手机客户端上 ...
- FaceBook开源PyTorch3D:基于PyTorch的新3D计算机视觉库
关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! PyTorch 进军三维计算机视觉了,现在,你的神经网络可以更轻松地和 3D 数据 ...
最新文章
- tcp转串口_PROFIBUS DP与Modbus/TCP网络转换操作指南
- crontab中执行postgresql命令
- Vue项目中使用svg文件
- Sharepoin学习笔记 —架构系列--02 Sharepoint的处理(Process)与执行模型(Trust Model) 1
- 二开微信表情包小程序去授权版+网站后端
- CentOS7配置samba共享文件系统
- 【Java开发规范】禁止在 foreach 循环里进行元素的 remove/add 操作
- css border画图
- Linux 目录结构及主要内容 2
- 形式语言与自动机理论 pdf_448页伊利诺伊大学算法图书【附PDF资料】
- 微信统一服务(小程序服务通知与微信公众号模板消息)发送
- Win 10提升隐藏性能
- TP-link 路由器 L2TP站点到站点VPN设置
- elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
- MySQL——————表的查询
- 摩托车新手驾驶教程[1]
- 用Wireshark看见TLS握手过程
- 微信信息如何在服务器加密,微信 消息加解密说明
- java 给word加水印,Java 实现在线给word 文档添加水印
- 有史以来影响世界的颠覆性技术 | 未来的高附加值颠覆性技术产业