模块化总是让人比较容易理解的,如果你的程序可以让人很容易理解,那是多么美好的事情!不论是对自己或是对别人。N层的开发让人看到了模块化的威力,这里不讨论整个系统的结构,而是细分到系统的每个功能,比如说一个网站的功能,可能有会员管理模块,有内容管理模块等等,DNN等一系列cms在这点的实现是很强大的,但是似乎真的“大”了一点。最近看了一些基于插件式的内容管理系统,不免让人觉得有些过度设计的感觉,web本该如此简单,太复杂的架构感觉有点沉重。最近用到Castle的Monorail,发现了一个好玩的东西,说出来分享下,知道的就不要乱拍啦!
首先我有一个简单的网站,里面已经有几个简单的功能了。因为简单,所以就想不断地完善,添加功能,步骤很简单。
看配置文件

<?xml version="1.0" encoding="utf-8"?>
<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;
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。

ControllersConfig con = MonoRailConfiguration.GetConfig().ControllersConfig;
con.Assemblies = new string[] { "ExPortal", "ControlOther" };

或许可以重写Monorail读取配置的代码,改为以数据库为存储,加以缓存依赖,下次再研究下。不知这样算不算一个可插拔的系统呢?但是好像在运行期改变Controller的Assemblies后也没效果哦,暂时没找到,如果有同学知道,说声咯!

转载于:https://www.cnblogs.com/Ablog-sunny/archive/2008/05/18/1202009.html

基于Monorail的系统功能模块化相关推荐

  1. TorchSeg—基于PyTorch的快速模块化语义分割开源库

    点击我爱计算机视觉标星,更快获取CVML新技术 昨日,语义分割算法DFN.BiSeNet 第一作者ycszen开源了TorchSeg项目,基于PyTorch的快速模块化语义分割开源库,复现了DFN, ...

  2. 编写自己的模块化php框架,ZTBCMS 基于 ThinkPHP 的高性能 模块化 快速开发框架 - 文章教程...

    ZTBCMS 基于 ThinkPHP 的高性能 模块化 快速开发框架,基于 ThinkPHP 框架开发,采用独立分组的方式开发的内容管理系统,支持模块安装/卸载,拥有丰富的扩展模块,同时系统对扩展方面 ...

  3. 基于Module Federation的模块化跨栈方案探索

    公司发展到一定程度,随着业务分支不断变多,B端C端的项目也随之增多,由于历史原因可能产生新老技术栈(vue/react)共存的情况,这既不利于组件物料的抽离统一(一类通用组件需适配多套技术栈),也增大 ...

  4. 基于Ext JS的模块化应用框架搭建及开发

    Ext JS模块化开发 早期基于Ext JS的Web开发方式,是在HTML中引入JS和CSS文件,典型的就是引入 ext-all.js 这样的文件.ext all 包含的内容很多, 有基本的核心组件. ...

  5. 基于CommonJS谈谈前端模块化

    模块化 CMJ 被熟知得益于 Node 社区的炸裂兴起,不过目前 Node 已经转移向了 ESM.不过有兴趣的依然可以研究研究,Node 中的 CMJ 实现 Node 中 CMJ 实现源代码 1.模块 ...

  6. 蚂蚁金服开源 ——基于 SOFABoot 进行模块化开发

    SOFA 中间件是蚂蚁金服自主研发的金融级分布式中间件,包含了构建金融级云原生架构所需的各个组件,包括微服务研发框架,RPC 框架,服务注册中心,分布式定时任务,限流/熔断框架,动态配置推送,分布式链 ...

  7. 基于Vue和SpringBoot的进销存管理系统的设计和实现

    作者主页:Designer 小郑 作者简介:Java全栈软件工程师一枚,来自浙江宁波,负责开发管理公司OA项目,专注软件前后端开发(Vue.SpringBoot和微信小程序).系统定制.远程技术指导. ...

  8. 基于Andriod的美图软件的设计

    资源下载地址:https://download.csdn.net/download/sheziqiong/86156646 资源下载地址:https://download.csdn.net/downl ...

  9. 基于 TensorFlow 在手机端实现文档检测

    手机端运行卷积神经网络的一次实践 - 基于 TensorFlow 和 OpenCV 实现文档检测功能 1. 前言 本文不是神经网络或机器学习的入门教学,而是通过一个真实的产品案例,展示了在手机客户端上 ...

  10. FaceBook开源PyTorch3D:基于PyTorch的新3D计算机视觉库

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! PyTorch 进军三维计算机视觉了,现在,你的神经网络可以更轻松地和 3D 数据 ...

最新文章

  1. tcp转串口_PROFIBUS DP与Modbus/TCP网络转换操作指南
  2. crontab中执行postgresql命令
  3. Vue项目中使用svg文件
  4. Sharepoin学习笔记 —架构系列--02 Sharepoint的处理(Process)与执行模型(Trust Model) 1
  5. 二开微信表情包小程序去授权版+网站后端
  6. CentOS7配置samba共享文件系统
  7. 【Java开发规范】禁止在 foreach 循环里进行元素的 remove/add 操作
  8. css border画图
  9. Linux 目录结构及主要内容 2
  10. 形式语言与自动机理论 pdf_448页伊利诺伊大学算法图书【附PDF资料】
  11. 微信统一服务(小程序服务通知与微信公众号模板消息)发送
  12. Win 10提升隐藏性能
  13. TP-link 路由器 L2TP站点到站点VPN设置
  14. elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
  15. MySQL——————表的查询
  16. 摩托车新手驾驶教程[1]
  17. 用Wireshark看见TLS握手过程
  18. 微信信息如何在服务器加密,微信 消息加解密说明
  19. java 给word加水印,Java 实现在线给word 文档添加水印
  20. 有史以来影响世界的颠覆性技术 | 未来的高附加值颠覆性技术产业

热门文章

  1. 清华大学开源用于网络嵌入的工具包 OpenNE
  2. SQL 2014 AlwaysOn 搭建
  3. REDGATE又一好用的脚本工具ScriptsManager1.3
  4. Windows Server 2012虚拟桌面分辨率支持列表
  5. javascript实现的时钟
  6. 2月26 ubuntu系统备份还原到相同电脑、另一台电脑
  7. Java CLH队列
  8. 命名实体识别研究综述
  9. Android NFC技术解析,附Demo源码
  10. jmeter学习指南之中文乱码