最近在准备做一个开源项目 Portal-Builder 门户/B2B通用系统  还没有给自己团队说因为框架还在设想阶段,以下框架解释肯定有不足之处,还望各位多多指教:

设计理念: 

1、争取做到最完善的开源,但是开源的东西未必好用,所以Portal-Builder 应该有一套简单易用的API/SDK,方便各种开发者直接获取相关信息 迅速投入开发;

2、最终网站管理者并不需要一个大而全的门户/B2B系统;由于各用户使用系统功能、模块不尽相同,因此需要有一套机制能够允许用户自行定义系统应该包含哪些模块、怎样运作,这样管理起来也更加简洁、方便;

3、目前市面流行的都是采用基于模板开发的系统,但是模板又无法完全与后台代码剥离,所以对于模板开发者还是有一定的技术要求;Portal-Builder 应该有一套完全不需要前台网页设计师懂得PHP/.NET 等编程语言就能够理解的机制,使网站的模板开发最大与后台代码脱离

4、Portal-Builder需要有一套类似于插件管理的功能,但是要更加强大(我称之为应用管理平台);也就是说,最好能够实现把CMS、分类信息、商城这些复杂的功能模块完全独立出来以应用程序的形式来安装,这样Portal-Builder其自身就只需要管理好自己的框架、基础数据并对安装的应用程序进行监管、验证就可以了

5、做到用户权限设定的动态设定,对每项操作不再像市面的网站系统一样预定义,允许开发者自行根据某种机制来动态更新可以进行设定的权限(我在自己的技术文档里把这称作PortalBuilderAction,即通过XML或某种形式对框架、各种应用进行操作/Action的预定义,从而实现动态权限读取、设定)

6、系统能够自动连接到Portal-Builder开源服务中心,进行系统自动更新

对上面理念的一些实现方面的简单介绍:

框架:门户整站框架后台与前台实现完全剥离,前台互动通过访问服务使用JSON+Javascript来完成;

功能模块:门户的功能按照AppStore方式的应用安装模式来完成,在系统的文件下按照Portal-Builder定义的文件格式来进行安装、管理和卸载;Portal-Builder框架通过定义一系列Interfaces来与这些相对独立的应用进行沟通和数据处理

重点介绍一下我对前台模板概念的阐述(与市面上见到的CMS、门户站之类的模板开发模式几乎完全不同,希望大家品尝和评论!)

前台模板:

模板可以是任意格式的文件,只需要是按照HTML格式编写就可以,(我们采用ASP.NET开发,因此如果使用ASPX保存模板,还可以通过.NET对ASPX进行服务端编译);

系统通过编写的模板标签语法定义表XML (PBTemplateSyntxDefinition.XML)来自动识别系统可以进行编译的标签, 目前我定下来的XML格式如下:(3月15日草稿)

估计有XML和Reflection经验的朋友们看后就知道我要做些什么了  呵呵

<?xml version="1.0" encoding="utf-8" ?><WebCiderSyntax_PortalBuilder><PBTemplateParser><!--    <SysParams> 用来获取系统自定义的一些参数,这些参数必须通过一个类调用方法来实现,比如在FakeClass.GetCurrentPageNumber("page")里面调用 HttpContext.Current.Request["page"] 来      调用当前页码 等等      SysParams里面的代码完全有万赛达商务科技PortalBuilder开发组定义,请勿自行删改

      <SysParams>里面的Param必须在{webcider:  } 标签内进行使用,使用时需要加前缀$

        比如:  {webcider:文库文档  页码=$当前页码  ....}

--><SysParams><param Name="当前页码" DefaultValue="1" ClassName="WebCider.FakeNamespace.FakeClass" AssemblyName="WebCider.FakeNamespace" MethodParamValue="page"  MethodName="GetCurrentPageNumber" /></SysParams><!--      <Commands> 用于用户进行自定义开发自己的编译语言      每一个<Command>代表可以在前台进行调用的一个标签名,比如下方例子编译设置    <Commands>      <Command Name="文库文档" Formatter="WebCider.PortalBuilder.Templates.PBTemplateFormatter">        <Parameters>          <param Name="创建者" DefaultValue="Null" ValueType="System.String" />          <param Name="最早时间" DefaultValue="2010-12-26" ValueType="System.DateTime" />          <param Name="最晚时间" DefaultValue="2015-12-26" ValueType="System.DateTime" />        </Parameters>        <Manager ClassName="WebCider.PortalBuilder.Docs.DocManager" AssemblyName="WebCider.PortalBuilder" MethodName="FindDocs" />        <Result ClassName="WebCider.PortalBuilder.Docs.DocCollection" AssemblyName="WebCider.PortalBuilder" />      </Command>    </Commands>

    在前台可以最终实现这样子的调用:    <div>      <div>您的查询结果如下:</div>      <div class="myClassName">        { webcider:文库文档 创建者="mleader1" 页码=$当前页码 返回数量="10" }      </div>    </div>

    您可以在标签外面嵌套其他html标签并进行CSS定义,从而实现对标签编译出的HTML的样式更改--><Commands><Command Name="文库文档" Formatter="WebCider.PortalBuilder.Templates.PBTemplateFormatter"><Parameters><param Name="创建者" DefaultValue="Null" ValueType="System.String" /><param Name="最早时间" DefaultValue="2010-12-26" ValueType="System.DateTime" /><param Name="最晚时间" DefaultValue="2015-12-26" ValueType="System.DateTime" /></Parameters><Manager ClassName="WebCider.PortalBuilder.Docs.DocManager" AssemblyName="WebCider.PortalBuilder" MethodName="FindDocs" /><Result ClassName="WebCider.PortalBuilder.Docs.DocCollection" AssemblyName="WebCider.PortalBuilder" /></Command></Commands></PBTemplateParser></WebCiderSyntax_PortalBuilder>

这里面有一点技术难度的就是 如果方法里面涉及到 out params 可能反射方面要写的代码就需要多一些

在这个XML的基础上,我们通过写一个PBTemplateParser.cs 就可以完全的实现HTML标签的识别、解析和编译,然后通过PBFormatter.cs 来进行二次格式化 (具体代码暂时不公开,不过其实很简单的)

那么在这种设想下,前台需要写的 比如 index.html 模板也的代码可能是这样子的:

<div id="docList">    {webcider:文库文档 创建者="mleader1" 页码=$当前页 数量="10" cssClass="abcClass"}</div>

然后在具体调用PBTemplateParser 和PBFormatter 完毕后,他的最终代码应该是这种结果:

<div id="docList"><div class="abcClass"><!---注:下面代码仅供参考,个人比较憎恨Table的,不过为方便解释我这里暂时写成table--><table class="webcider_table"><tr><td>文档ID</td><td>文档标题</td><td>创建时间</td><td>创建者</td></tr><tr><td>101</td><td>asdf</td><td>2012/12/12</td><td>mleader1</td></tr><tr><td>101</td><td>asdf</td><td>2012/12/12</td><td>mleader1</td></tr>            ...</table><table class="webcider_pagination"><tr><td>当前页:2/11</td><td>每页数量: 10</td>                ...</tr></table></div></div>

也就是说,也就是说这样子我们也就实现了传统意义上的页面模板重写,甚至连标签语言也是用户自己定义的一套自己的语法。 至于样式,只要PBFormatter编译的时候全部使用 div &css 格式,我们便能够轻易重定义样式和布局。 —— 前台工作就能够全部交给前台网页设计师了。 (注:互动性的比如登录验证、表单提交等都可以通过JSON数据、AJAX提交到Web服务来实现)

最后:由于每个应用程序开发都有自己的不同点,框架写一个TemplateParser哪怕功能再强也有可能不包含开发者自己想做的事情,所以Portal-Builder应该同时提供ITemplateParser 和ITempalteFormatter 来方便开发者来进行自己的模板编译器的开发

模板和URL的编译应用:  模板编译一旦实现,就要看怎么调用了,模板调用的具体实现方式目前暂时保密,但是理念很简单:Url重写定义了,那么每个Url肯定需要有一个页面落脚点,我们的概念就是网站、子站肯定有至少一个Url,每个Url必须指定一个模板编译页,每个网站、子站应该至少有一个模板编译页。  例如网站首页 {abc}.localhost/ 我们就可以指定他的访问地址模板是 root/Templates/System/index.html  那么至于这个 index.html 如何页面链接是什么样子的、怎么跳转,就完全是前台页面开发者的责任了,只要他做这张模板的时候页面Url是根据Poral-Builder的Url编译规则来的就可以了

系统站点管理和Url重写模块今天就来不及阐述我的概念了   上面的实现方式基本上大家可以看出来我打算让团队去做的Portal-Builder 系统的基本框架会是什么样子,欢迎大家讨论! 我把开源Wiki建立起来了,放在 http://www.portal-builder.com 这个地址,但是内容还没有  一旦项目正式开始,相信大家会一起把内容填充起来了的,呵呵 ...

这两个星期会确定是否去做这一块儿  如果去做了,那么欢迎各位踊跃参与共同开发和讨论.

转载于:https://www.cnblogs.com/mleader1/archive/2012/03/16/2400525.html

分享正在构想的开源门户/B2B框架理念 与现有流行的门户系统/B2B系统有很大不同...相关推荐

  1. 【Qt 开源音视频框架模块QtAV】03:QTAV主要接口展示以及播放器源码分享

    介绍 QtAV 是一个基于 Qt 和 FFmpeg 的跨平台.高性能多媒体播放框架,能够帮助你轻而易举地编写出一个播放器. [Qt 开源音视频框架模块QtAV]01:介绍.编译以及简单使用 因为网上使 ...

  2. 开源自动化机器学习框架

    20211101 在 Airbnb 使用机器学习预测房源的价格 https://blog.csdn.net/weixin_33735077/article/details/87976278?spm=1 ...

  3. Android在eoe分享一篇推荐开发组件或者框架的文章

    http://www.eoeandroid.com/thread-311194-1-1.html y407827531 5 主题 62 帖子 352 e币 实习版主 积分 314 发消息 电梯直达 楼 ...

  4. 数据同步的终极解决方案,阿里巴巴开源的Canal框架当之无愧!!

    写在前面 在当今互联网行业,尤其是现在分布式.微服务开发环境下,为了提高搜索效率,以及搜索的精准度,会大量使用Redis.Memcached等NoSQL数据库,也会使用大量的Solr.Elastics ...

  5. 刚刚,旷视开源深度学习框架「天元」:Brain++内核,研发和落地都在用;孙剑:COCO三连冠背后的秘密武器...

    乾明 发自 凹非寺  量子位 报道 | 公众号 QbitAI 耗费资源打造优化6年,迭代到8.0版本,旷视技术体系的关键支柱,现在正式对外开源. 刚刚,深度学习驱动之下最早创业的中国AI独角兽旷视,宣 ...

  6. 【机器学习】太棒了!8 个开源自动化机器学习框架,轻松搞定机器学习!

    自动化机器学习(AutoML)可以帮助机器学习管道中的某些关键组件实现自动化.其中机器学习管道包括数据理解.数据工程.特征工程.模型训练.超参数调整.模型监控等. 在这篇文章中,我将分享 8 个开源的 ...

  7. Quartz.net 开源job调度框架(一)

    Quartz.NET是一个开源的作业调度框架,非常适合在平时的工作中,定时轮询数据库同步,定时邮件通知,定时处理数据等. Quartz.NET允许开发人员根据时间间隔(或天)来调度作业.它实现了作业和 ...

  8. qt商业版和开源版的区别_微擎商业版系统V2.0.9全开源版纯净框架

    微擎商业版系统V2.0.9全开源版纯净框架_全新界面无后门无任何限制.该源码不含任何安装模块,最重要的是该版本是一键安装版,主要你上传到服务器上,然后直接运行域名就会直接进入安装环境,不会像网络上的其 ...

  9. 爱了!蚂蚁开源的“SpringBoot”框架,新增了这6项功能...

    SOFABoot 是蚂蚁金服开源的基于 Spring Boot 的研发框架,它在 Spring Boot 的基础上,提供了诸如 Readiness Check,类隔离,日志空间隔离等等能力.在增强了 ...

  10. canal mysql多节点_数据同步的终极解决方案,阿里巴巴开源的Canal框架当之无愧!!...

    写在前面 在当今互联网行业,尤其是现在分布式.微服务开发环境下,为了提高搜索效率,以及搜索的精准度,会大量使用Redis.Memcached等NoSQL数据库,也会使用大量的Solr.Elastics ...

最新文章

  1. Spring环境搭建,IoC容器初体验~
  2. linux 脏牛提权 cve-2016-5159
  3. [ActionScript 3.0] AS3.0 简单封装Socket的通信
  4. Windows过滤驱动程序的概念
  5. cclink 和发那科机器人_发那科 iB系列 | 机器人地装行走轴三大升级介绍
  6. zcmu-2129(拓扑排序)
  7. wxWidgets:wxColour类用法
  8. VC创建DLL动态链接库及其调用
  9. ppz css栅格框架
  10. WPF入门教程系列(二) 深入剖析WPF Binding的使用方法
  11. CentOS 下使用yum 命令安装MySQL
  12. LeetCode1139. 最大的以 1 为边界的正方形 (二维滑动窗口待优化)
  13. Android个人日常消费理财_财务软件
  14. 后盾网php多少钱_后盾网php视频教程:2020最热的8个后盾网免费php视频教程
  15. JQAjax读页面里面的方法
  16. kettle 配置jndi数据源
  17. 雷达动目标显示(MTD)的理解
  18. 【云原生之Docker实战】使用Docker部署Mindoc文档管理平台
  19. 如何像说话一样去写作 -- Ray Dalio
  20. JAVA8 lambda表达式 对List集合去重

热门文章

  1. 无恶意的协议才有效力
  2. 惊恐!电脑竟然会使用计谋了!——第二局感悟
  3. 定义带参数的C宏,方便输出调试信息
  4. python运行不出结果_python程序没有报错但是运行没有任何结果怎么办?
  5. c语言汉诺塔递归算法_Python进阶之递归函数的用法及其示例
  6. jspx格式手机打开_zip格式的文件怎么打开,手机和电脑的操作方法一样吗?
  7. android手机iPhone对比,安卓手机与苹果手机功能对比【详细介绍】
  8. server2012卸载oracle,Windows Server 2008 R2卸载干净ORACLE 11G
  9. string类的函数
  10. 大数据-05-Spark之读写HBase数据