learun.cn http://blog.okbase.net/learun666 组件化开发和模块化开发概念辨析 http://blog.okbase.net/learun666/archive/56389.html learun666 2020-1-3 14:31:00  

网上有许多讲组件化开发、模块化开发的文章,但大家一般都是将这两个概念混为一谈的,并没有加以区分。而且实际上许多人对于组件、模块的区别也不甚明了,甚至于许多博客文章专门解说这几个概念都有些谬误。

想分清这两个概念我觉得结合一下软件的渐进式开发场景更容易理解。但是下面的篇幅会比较长,所以我先说结论,不耐烦的同学可以先看:

概念区别

对比

http://img2.mukewang.com/5e0edab60001105406020134.jpg 

说明

组件:最初的目的是代码重用,功能相对单一或者独立。在整个系统的代码层次上位于最底层,被其他代码所依赖,所以说组件化是纵向分层。

模块:最初的目的是将同一类型的代码整合在一起,所以模块的功能相对复杂,但都同属于一个业务。不同模块之间也会存在依赖关系,但大部分都是业务性的互相跳转,从地位上来说它们都是平级的。

因为从代码组织层面上来区分,组件化开发是纵向分层,模块化开发是横向分块,所以模块化并没有要求一定组件化。也就是说你可以只做模块化开发,而不做组件化开发。那这样的结果是什么样的呢?就是说你的代码完全不考虑代码重用,只是把相同业务的代码做内聚整合,不同模块之间还是存在大量的重复代码。这样的成果也算是做到了模块化,只不过我们一般不会这样而已。

和组件模块近似的一对概念是库和框架。库的概念偏近于代码的堆集,是分层的概念,所以对应组件化。框架是结构化的代码,所以应用于模块化。框架是骨,模块化是肉。

讲到这给大家介绍一个快速开发平台:力软快速开发平台(配置型快速开发平台,内含代码生成器、工作流、APP开发、移动端等多种功能)

举例

下面我们举例来说明。

组件化就比如公共的alert框,最初在许多页面都有使用,后面提取出一份相同的代码,其实就是基于代码复用的目的。

模块化就比如一个资讯功能,它本身只在这一个地方使用,没有复用的需求,但系统启动的时候要初始化它的数据,首页显示的时候要展示它的数据,显示红点的时候要拉取它的未读数。这样一来应用中就有很多地方涉及到它的代码。如果我们将它看做一个整体,那么资讯模块和主应用的耦合性就非常高了。所以我们也要把它封装成模块,把相关的代码放到独立的单元文件里,并提供公共方法,这就是高内聚的要求。

渐进式开发过程

当然这几个概念在服务端开发和客户端开发领域有些微差别,我下面的例子就从移动端开发的角度上进行辨析。

首先我们定义一个虚拟的产品——一款知识类应用,包含咨询、问答、学院、直播等功能。

接下来我们逐步拆分这个产品。

如果开发时没有考虑任何组件化模块化开发,那么此应用的所有功能都是堆积在一起的,总结起来就是高耦合,低内聚,无重用。

1.组件

那么代码重构的第一步是什么呢?

将重复的代码合并成为一份,也就是重用。

我们来看组件化开发的定义,它的着重点就是重用,那这一步最后的结果就是提炼出一个个组件给不同的功能使用。

这里我们可以看一下依赖关系,是具体功能依赖提炼出来的组件,组件本身之间可能也有依赖关系,但一般不多。所以我们总结组件化开发的原则就是高重用,低依赖。当然这只是相对而言。

基于这样的认识,我们甚至于可以把资讯、问答、学院、直播等功能封装成组件,只不过这些组件比较大,依赖可能多些,不过本质上没有多少区别,而且实际上网上许多文章说所的模块化开发其实就是这种组件化的“模块”。

2.模块

下面再说模块,按照模块的定义,它是以关注点进行划分的,关注点说到底就是功能,也就是说根据我们上面的例子,资讯、问答、学院、直播可以分成不同的模块。

我们最开始定义这个虚拟产品的时候说,它有三个特点——高耦合、低内聚、无重用。而第一点组件化开发主要是解决了重用问题,提升了部分内聚,而耦合问题则没有涉及。

所以说我们上面可以将这个产品在逻辑上划分为资讯、问答、学院、直播四个模块,但在代码层面上它们却不是四个模块,因为它们的代码都是混杂在一起的。比如产品首页,可能推荐了部分资讯、显示了热门问答、推送了目前的直播,而这些功能的代码则是写在一起的;再比如程序启动的时候,这四个模块都需要初始化一些数据,而初始化数据的代码也是写在一起的;再比如程序需要显示未读消息数,而这几个模块都有自己的未读消息数逻辑。

如果未进行模块化开发的拆分,那么很多时候不同模块的同一类的代码都是直接写在一起的,比如系统启动的时候,我们会在启动方法里直接写多个模块的初始化代码。

而模块化开发就是为了解决这一问题,即提高内聚,将分属同一模块代码放到一起;降低耦合,将不同模块间的耦合程度弱化。

高内聚是目标,但是现状是有许多地方会用到多个模块,比如启动的时候会调用四个模块,首页会展示三个模块的界面。如果要高内聚,那么必然需要这些模块为不同的场景提供相同的方法,这就是说所有模块要实现同一套多个接口。这样主应用和模块之间的重耦合就变成了主应用和接口耦合,接口和模块耦合这样的松耦合。

但这样的简单模块只是轻模块,统一接口较少。而统一定义的接口越多,模块和统一接口的耦合就越高,也便是重模块。

而我们一般讲的路由问题其实只是解决模块间耦合的问题,并不是模块化开发的必然需求,更多时候是基于产品上的动态化要求,只不过我们一般都会在这个时间考虑这一事情而已,就像我们不会只做模块化开发同时不做组件化开发一样。

讲到这里,模块和组件的区别就已经很明显了。

]]>
未来,企业CRM将有怎样的发展趋势? http://blog.okbase.net/learun666/archive/56385.html learun666 2019-12-27 15:51:00  

​进入互联网时代,企业的信息化发展也开始从传统的定制模式逐步走向敏捷开发,所谓敏捷,即要求应用系统在一定程度上满足自主配置的要求,以适应企业多样化的业务发展。

CRM是近些年伴随着企业智能化管理而出现的,从最初的类ERP时代,到现在的多维度发展,体现了企业对CRM系统的重视,如今的CRM,不仅仅是客户关系的管理,已经上升至企业发展战略的一部分。

http://img2.mukewang.com/5e05afdb0001f67608200507.jpg

那么,从维度上说,有三个方面值得深究: 

一、产品功能的目标客户管理

对于一个产品,不论是无形的软件、还是有形物品,对于其所明确的主要功能和次要用能,都将会用功能标签匹配客户需求标签,并采用大数据的方式对客户信息进行尽可能的采集与存放,以积累用户信息的变化趋势、购买行为过程,从而对“客户需求与产品功能的关系”进行管理。 

二、人际关系或者品牌管理 

在初期的CRM中,此种管理模式没有得到充分的重视。而实际在一些“点子选手”的脑袋中展现,并通过市场部、媒体广告的形式进行实施。主要的推广表现形式可能是“广告、推介会”,并通过“调查问卷、市场销量佐证”的方式来推测“广告、推介会”的有效性。

实际上,随着最近几年行为心理学的发展,以及认知科学的体系成熟,对于一个人的认知路径,和决策逻辑的记录模型,已经基本上有了完整的雏形。

利用心理学的认知的基本逻辑,在客户可能的认知路径上,让其看到或听到,甚至感受到与其记忆中相关联的内容,并不断强化,从而实现构建企业与客户之间的印象关系。

而且,由于企业的特殊型,这种印象关系比起人际关系扩展出了法人印象、商品服务印象等更多的关系印象。

但人的认知结果,会受到认知背景的影响。所以,并不是你所强行输入的以设计者为蓝本的认知背景,就能在社会上得到广泛相同的认知结果,毕竟每个人看待事物的角度不同。

http://img2.mukewang.com/5e05afe5000187bf08220491.jpg

三、利益管理

所谓的利益管理,是指在对这个品牌认可的产品功能条件下, 客户究竟愿意付出多少利益去交换产品的物质和功能。

这种利益交换的核心含义是:在结果一致的情况,销售活动的双方的成本付出。

这个过程中通常表现为产品购买方在购买过程中,获得产品销售方在资金、服务上的赠予行为。这种“赠予”的计算模型,在经典的经济理论中,通常是需求满足模型和边际效应。

但是随着对购买过程的进一步剖析,发现将宏观经济转变为销售过程管理理论的过程中,还有更多的细节需要去管理:

1、企业方面是战略、预算、招投标的决策过程,CRM软件会需要采用类似项目的方式,管理这种过程化采购。

2、家庭方面是家里当家人的挣钱能力、喜好的决策过程。

3、个人方面,主要是个人喜好的决策过程。

对于企业、家庭、个人,由于决策过程的步骤、角色不同,所采用的规律也不同,CRM的软件会分化出不同的数据结构去分别管理。

http://img4.mukewang.com/5e05afef0001ed2c08100463.jpg

CRM与人工智能:商业or科学

从2008年左右,在学习企业系统理论课程中,就感觉到移动操作系统、通讯技术的变化,将对CRM软件的形态带来非常大的影响。在学习人工智能的过程中,也曾思考过移动终端在对于图像、声音的采集功能如何应用到CRM软件领域进行拜访过程分析。  

其实在销售过程中,对数据的分类计算是基于客户的分类,远远不同于原先的企业管理软件所处理的财务账目、销售销量。

最根本的区别就是因为这些财务数据都是被“线性理想化”了,而客户是不会始终坐在线性的理想环境中保持不变。

根据上述的模型就可以看出,仅仅从销量进行分析的数据,对于CRM的客户关系管理来说,仅仅可以说是“冰山一角”,对于其他的数据管理基本上都属于“非线性计算”。

而最近20年的人工智能的发展,分类算法和概率计算的能力越来越强、越来越普及,也使得人工智能从某些研究领域的成功,逐步推广到行业应用领域。

企业在做CRM建设的过程中,可能会有深刻的体会,从订单、经销商管理、产品流向、客户联系人、用户管理、销售行为管理、售后服务管理这些功能模块,都是CRM建设无法避开的,并且是无捷径的。

但是,将来CRM的建设,将会进入到一个非常宽广的领域,而且得益于人工智能、大数据、移动化、通讯技术的发展,CRM将会变成企业管理领域中形态最多、功能最多、应用最广、数据最丰富的系统。

http://img.mukewang.com/5e05affb0001cbfa12670618.jpg

力软CRM

客户是企业最重要的资产,企业想加强对客户的长期管理是必然的。但如果没有一个完整的系统,企业想要满足这个需求是十分困难的,而基于企业业务不断拓展变动的事实,敏捷开发框架或许是一个不错的选择。

Learun敏捷开发框架并非一个完整的应用软件,而是一款二次开发功能强大的快速开发平台,可以通过基础配置全面提升企业业务流程的管理,降低企业成本,不但可以便捷的开发智能化CRM系统,还可以以框架为基础开发ERP、OA、MIS、HRM、SAAS、移动APP、电商后台系统等,基本做到了一套框架在手,所有系统满足。

官网:www.learun.cn

免费演示地址:http://www.learun.cn/Home/VerificationForm

]]>
​ 敏捷开发的魅力:中小企业为何对快速开发平台情有独钟 http://blog.okbase.net/learun666/archive/56383.html learun666 2019-12-24 16:51:00  

所谓敏捷,就是软件的开发维护要具有较高的灵活性,目前市场上的相关快速开发平台均是以敏捷性作为指导思想,进行软件基础框架的搭建。

http://img3.mukewang.com/5e01c8ec0001492519200917.jpg

为什么此类快速开发平台会兴起,且受到中小企业的青睐呢?

1. 中小企业业务规范性差,信息化需求柔性大

相较于大企业,中小企业业务的随意性比较高,员工的具体分工相对比较模糊,这就要求其信息化建设需要满足相关业务的变动节奏,以与新业务做有效的匹配。

这时候,信息系统除了要保证一定的高度,还必须要便捷、灵活,以较小的成本迅速完成不同流程的变更,这对于信息化基础不好的中小企业来说,具有较高的挑战性。

2. 中小企业发展快,信息化需求变动大

有一些中小企业虽然处于初创时期,但是发展速度却很快,就像上面所说,整个业务发展形态甚至会出现“朝令夕改”的情况,你这边信息化需求刚刚提出来不久,还没有等信息应用进行推广实施,常常就会马上出现彻底推翻原先需求的困境。

3. 中小企业资金投入压力大

相比一些大公司,中小企业在生存发展上更为关键。由于行业竞争者众多,企业会优先把资金放在紧迫的地方,比如研发和市场,而信息化常常在一种近乎于零的状态下进行的。所以,很多中小企业只能在有限的人力及技术条件下进行信息系统的研发,以支持业务需求的实现。

4. 中小企业信息化人才缺乏

中小企业,人才缺乏是一种常态,信息化的人才更是如此。目前IT相关的人力成本已经居于很高的水平,而这些自身实力有限的中小企业对于专业人才的吸引力并不高,较差的工作环境和待遇让这些人对中小企业并不感冒。

中小企业在经济发展过程中是一支非常重要的力量,但是在激烈的市场竞争中,大多数中小企业在规模、管理上、业务发展和大型企业相比,都存在着较大的差距。这些中小企业要想在竞争激烈的市场中生存下来,必须比大企业更加灵活、高效、创新。

基于以上限制条件,我们就可以理解中小企业面对信息化建设的实际需求时为什么没有选择较为成熟的通用软件产品,而却钟情于快速开发平台

http://img1.mukewang.com/5e01c8f400016ea908280504.jpg

信息技术的发展,为中小企业同大企业在同一起跑线上竞争创造了有利条件。但是不同的资金实力决定了企业信息化的不同方向,快速开发平台无论在费用、人员、灵活性上都更加适合中小企业。

快速开发平台通常采用先进的“配置化”、“组件化”设计理念和高级封装技术,并积累了大量成熟而实用的应用组件,绝大多数开发与应用无需编码,特殊功能也可以在开发人员懂少量编程的情况下进行“所见即所得”式的开发,使开发效率得到质的提高。同时,相关应用配置完成可立即部署,大大缩短了开发的调试期,降低了用户的开发成本。为中小企业和软件开发厂商提供了一套快速开发的工具,同时也为用户提供了一套智慧的管控一体化的信息支撑平台。

免费演示案例:http://www.learun.cn/Home/VerificationForm

]]>
据说快速开发平台比传统开发快6到10倍,这是真的! http://blog.okbase.net/learun666/archive/56382.html learun666 2019-12-21 19:12:00  

快速开发平台,颠覆了传统的软件开发模式,引爆了一场科技革命。其一方面可以降低企业应用开发人力成本,另一方面可以将原有数月甚至数年的开发时间成倍缩短,从而帮助企业实现降本增效的价值。

像国外的OutSystems、Mendix、Salesforce或者国内的开发平台等等,都可以开发OA、ERP、CRM、HR、进销存等各种企业管理应用,并无缝集成打通其他软件系统,实现各系统间的互联互通。

 很多人在不太了解快速开发平台的时候,可能对于快速开发平台存在着两个误解。

一、快速开发平台只适合于毫无技术背景的人

事实上快速开发平台也同样适合开发人员进行开发。快速开发平台既可以提高开发人员开发信息化系统的效率,同时也满足了无代码基础的业务人员进行信息化开发。

对于开发人员来说,使用快速开发平台可以有效的提高开发效率。开发人员通过图形化界面交互实现应用搭建,可视化的操作,标准化的配置,大大缩减开发时间和所需人员。当然代码平台并不是万能的,他并不能实现所有的功能,拿力软快速开发平台来说,当在平台遇到实现不了的配置,可以自定义开发,也就是说可以根据需要自己开发出平台没有的功能。

二、快速开发平台只是变革传统开发模式,并不是为了颠覆开发者

快速开发平台是为了减轻和降低开发者的“工具属性”,让开发者从繁重的代码解放出来,参与更具有价值的创作,是未来价值的必然趋势。同时,开发人员不需要多次和业务人员和实际使用人员反复沟通,面对界面化的需求,对于开发人员,很可能是将之前的代码推翻重来。

快速开发平台有什么优势?

首先,提高效率!

业务人员可以自行搭建业务流程管理系统,降低了沟通成本。同时也避免了“开发人员不懂业务”的尴尬。也不用等待开发人员的实现过程中,出现系统实现了之后与需求不匹配,甚至实现了之后业务逻辑已经发生了变化的尴尬。管理者也可以通过开发平台,注入管理思维。

 

其次,降低成本!

优秀的开发者的高薪早已不是秘密,所以开发资源不能浪费在一些通用而且易于实现的需求,快速开发平台就是做这个事情,可以以非常低的成本,来代替开发人员的部分工作内容。原来需要十个人的项目,现在可能只要四个人甚至更少的人就能完成。

当然,快速开发平台还有很多其他的价值,这里就只列举了对企业最重要的两点来阐述,降本和增效,这几乎是所有企业永恒的主题。

力软现如今正在开发相关项目并提供服务。

力软敏捷开发框架开发运行支撑平台通过对框架的深入理解和实践,实现了平台的设计、开发、测试、维护、监控的一站式管理,帮助企业快速搭建信息化管理系统,同时为传统企业的信息化转型提供了优秀的解决方案。http://img1.mukewang.com/5dfdfbcf0001a32210420441.jpg

 

 

]]>
时至今日,为何C语言在软件开发领域的地位仍无法撼动 http://blog.okbase.net/learun666/archive/56381.html learun666 2019-12-21 15:42:00  

 http://img3.mukewang.com/5dfdca330001580206410351.jpg

部分内容与国内生态有一定出入,以下为译文:

过去的 50 年,C 语言已经成为重要的软件开发语言。这里介绍了 2019 年它是如何与 C++、Java、C#、Go、Rust 和 Python 进行竞争的。

对于计算机编程语言来说,没有什么技术能流传使用 50 年,除非它比其他的都好用。C 语言于 1972 年面世,如今在软件世界仍保持着基本底层开发的主流语言的地位。

但有时一个技术能被长久的流传使用, 只是因为人们还没有找到一个更好的替代品罢了。在过去的几十年,涌现了大量的语言——有的专门为了挑战 C 语言的统治地位而设计,有的则因为其流行性而从侧面削弱了 C,感觉原文是这个意思。

真的很难证明 C 需要被替代。编程语言调查和软件开发实例都印证了可以用远比 C 好的方式来做事情。但 C 的地位仍岿然不动, 它的背后是几十年的调查和开发。几乎没有语言可以在性能上,在裸机上,或者在普遍性上打败它。即便如此,还是值得看一下 C 是如何在 2019 年与其他大名鼎鼎的语言进行较量的。

C vs. C++

很自然地,C 会被拿去与 C++ 做对比,从名字本身就能看出,C++ 是从 C 发展而来的。两者之间的不同就在于易扩展性,或者易用性,这取决于你问谁。

语法和方式上,C++ 与 C 语言比较接近,但 C++ 提供了很多原生 C 没有的、却比较有用的特性:命名空间、模板、异常、内存管理等等。项目如果对于性能比较敏感的话,例如数据库和机器学习,通常使用 C++ 编写来帮助系统提高性能。

除此之外,C++ 比 C 更容易扩展。即将到来地 C++ 20 甚至带来更多的新特性,包括模块、协程、一个同步库以及相关的概念,这些都让模板更易使用。对标准 C 的最新修订几乎没有新增特性,而是更注重保持向后兼容性。

事实上,所有 C++ 的优点也是它的缺点。最重要的一个点就是,C++ 的特性使用得越多就越复杂,结果就越加难以控制。那些把自己限制于 C++ 子集的开发者能避免很多严重的危害和过度使用。但有些机构想避免 C++ 所有的复杂性。坚持使用 C,开发者将自己限制于子集内。比如 Linux 内核的开发团队就会避开 C++.

对于你和在你之后维护代码的开发人员来说,选择 C 是一个避免 C++ 过度使用纠纷的方式。当然了,C++ 也有一系列丰富的高级功能。但如果简洁明了更适合现在或者未来项目的整体发展的话,C 会更有优势。

http://img4.mukewang.com/5dfdca3c0001ef5605970301.jpg

C vs. Java

几十年之后,Java 仍然是企业级软件开发的主要语言——一般开发的主要语言。大多数优秀的企业软件开发项目都是用 Java 写的——包括绝大多数 Apache 基金会项目,当开发企业级项目时,Java 也仍然是一个可行性比较高的语言。

Java 的语法大量地借鉴了 C 和 C++。不过与 C 不同的是,Java 不会默认编译成机器语言。相反地,Java 运行时环境 JVM 会将 Java 代码即时编译到目标环境中运行。在良好地条件下,即时编译的 Java 代码可以达到甚至超过 C 的性能。

Java 奉行的“一次编写,到处运行”的思想,可以让 Java 程序在相对较小的调整下,运行在不同的环境里面。相比之下,尽管 C 已经移植到许多体系结构中,但是任何给定的 C 程序可能仍然需要定制才能在 Windows 和 Linux 上正常运行。

这种可移植性和强大性能的结合,以及软件库和框架的庞大生态系统,使 Java 成为企业级项目语言的一员。

Java 落后 C 的地方是 Java 从来没有竞争的领域:接近底层运行 ,或直接操作硬件。C 代码被转换成机器码,由进程直接执行。Java 被编译成字节码,它是随后由 JVM 解释器转换为机器代码的中间代码。此外,尽管 Java 的自动内存管理在大多数情况下是一种好事,但是 C 更适合于对有限内存资源有优化要求的程序。

在某些地方,Java 的性能可以接近 C。JVM 的 JIT 引擎可以在运行时 根据程序的行为优化程序,可以进行许多种类的优化,对于预先编辑的 C 语言而言,这个是行不通的。例如,Apache Spark 使用自定义的内存管理代码绕过 JVM 进行了一定程度的内存内处理优化。

http://img3.mukewang.com/5dfdca450001693c07200340.jpg

C vs. C# 与.Net

在推出近 20 年之后,C 和.NET 框架仍然是企业软件世界的主要组成部分。有人说,C# 和.NET 是微软对 Java 的一种回应(托管代码编译系统和通用的运行时),因此 C 和 Java 之间的许多比较也适用于 C 和 C#/.NET。

与 Java(以及 Python 的某些部分)一样,.NET 提供了跨多种平台的可移植性和集成软件的广阔生态系统。考虑到.NET 世界中的一些面向企业的开发,这些都是很大的优势。当使用 C 或任何其他.NET 语言开发程序时,可以利用针对.NET 运行时编写的各种工具和库。

.NET 另一个和 Java 类似的优点是 JIT 优化。C 和.NET 程序可以像 C 那样提前编译,但它们主要是由.NET 运行时即时编译并使用运行时信息进行优化。JIT 编译允许对正在运行的.NET 程序进行各种优化,  这在 C 中是无法进行的  。

和 C 一样,C 和.NET 提供了各种直接访问内存的机制。堆、堆栈和非托管系统内存都可以通过.NET API 和对象进行访问。开发人员可以使用.NET 中的unsafe模式来实现更高的性能。

不过,没有免费的午餐。托管对象和unsafe对象之间不能随意交换,它们之间的封装传送需要性能做为代价。因此,减少两者之间的传递,可以最大化的提高.NET 程序的性能。

当负担不起托管内存相对于非托管内存的代价时,或者当.NET 运行时对于目标环境(如内核空间)是一个很糟糕的选择项或者根本不可用时,那么 C 语言或许就能解决你的问题了。与 C 和.NET 不同,C 默认情况下会开启直接内存访问。

http://img3.mukewang.com/5dfdca4e0001fda606900319.jpg

C vs. Go

Go 语法和 C 很像,大括号作为分隔符、以分号结尾的语句等等。精通 C 的开发人员通常无需太多困难就可以直接转入 Go,甚至把 Go 的新特性如名称空间和包管理考虑在内也是如此

代码的易读性是 Go 的指导设计目标之一:使开发人员能够轻松地跟上任何 Go 项目的速度,并在短时间内精通代码库。C 代码库很难摸索,因为它们很容易变成一个由宏和特定于项目和给定团队的嵌套。Go 的语法,以及其内置的代码格式和项目管理工具,都是为了避免这些机制问题。

Go 还提供额外的功能,像 Goroutines 和 Channels,用于处理并发性的语言级工具以及组件之间的消息传递。在 C 语言里面只能自己实现或者用三方库,但是 Go 以开箱即用的方式提供了这些特性,让我们在开发需要类似功能的软件的时候,变得极其方便。

Go 与 C 在后台上,最大区别在于内存管理。默认情况下,Go 对象被自动管理和回收。对于大多数编程工作来说,这非常方便。但这也意味着任何需要对内存进行特殊处理的程序,会比较难办。

Go 的确包含了一个unsafe的包,用于规避 Go 的一些类型处理安全性,例如使用 Pointer 类型读取和写入任意内存。但unsafe伴有一个警告,即用它编写的程序“可能不可移植,并且不受 Go 1 兼容性准则保护”。

Go 非常适合构建命令行程序和网络服务等程序,因为它们很少需要这样的细粒度操作。但是低级的设备驱动、内核空间操作系统组件以及其他需要对内存布局和管理进行严格控制的任务最好是在 C 中创建。

http://img4.mukewang.com/5dfdca5600019d6a06310308.jpg

C vs. Rust

在某些方面,Rust 是对 C 和 C++ 造成的内存管理难题的回应,也是对这些语言许多其他缺点的回应。Rust 编译为本机代码,因此在性能上与 C 相当。不过,默认情况下,内存安全是 Rust 的主要卖点。

Rust 的语法和编译规则帮助开发者避免常见的内存管理错误。如果一个程序存在跨过 Rust 语法的内存管理问题,那么它就不会编译。使用该语言的新手,尤其是从像 C 这样为此类错误提供了大量空间的语言转过来的新手,他们学习 Rust 的第一阶段是如何安抚编译器。但是 Rust 支持者认为,这种短期的痛苦将得到一个长期的回报:不会牺牲速度的更安全的代码。

Rust 也可以用它的工具改善 C。默认情况下,项目和组件管理是 Rust 提供的工具链的一部分,与 Go 相同。有一种默认的、推荐的方式来管理包、组织项目文件夹,以及处理许多其他事情,这最多是临时措施,每个项目和团队处理它们的方式都是不同的。

尽管如此,对于 C 开发人员来说,被吹捧为 Rust 优势的东西可能看起来不是那样的。Rust 的编译时安全特性不能被禁用,所以即使是再小的 Rust 程序也必须符合 Rust 的内存安全限制。默认情况下,C 可能不太安全,但在必要时,它更灵活,更宽容。

另一个可能的缺点是 Rust 语言的大小。即使考虑到标准库,C 的新特性也相对较少。Rust 特性集正在蔓生并持续增长。与 C++ 相比,较大的 Rust 特性集意味着更强大的能力,但也更复杂。C 是一种较小的语言,但更容易建模,因此可能更适合于 Rust 看上去有点过火的项目中。

http://img2.mukewang.com/5dfdca620001e1f907160395.jpg

C vs. Python

现在,每当谈论软件开发时,Python 似乎总是能进入到讨论中。毕竟,Python 是“第二个适合所有事情的语言”,毫无疑问,它是最通用的语言之一,有数千个第三方库。

Python 强调的是开发速度而不是执行速度,这是它与 C 的最大区别。用另一种语言(如 C 语言)组装一个程序可能需要一个小时,而用 Python 只需几分钟。另一方面,该程序在 C 语言中执行可能只需要几秒钟,而在 Python 中运行则需要一分钟。(一个很好的经验法则:Python 程序的运行速度通常比 C 程序慢一个数量级)。但是对于现代硬件上的许多工作来说,Python 足够快,这是它获得成功的关键。

另一个主要区别在于内存管理。Python 程序完全是由 Python 运行时进行内存管理,因此开发人员不必担心分配和释放内存的困难。但这里再次强调,开发者的轻松是以牺牲运行时性能为代价的。编写 C 程序需要谨慎地注意内存管理,但是生成的程序通常是纯机器速度的黄金标准。

然而,其实 Python 和 C 之间有一个很深的联系:参考 Python 运行时是用 C 写的。这允许 Python 程序打包 C 和 C++ 编写的库。Python 生态系统中一些重要的第三方库,如机器学习,其核心是 C 代码。

如果开发速度比执行速度更重要,并且如果程序的大部分执行部分可以隔离成独立的组件(而不是分散在整个代码中),那么纯 Python 或 Python 和 C 库的混合比单独使用 C 更好。否则的话,C 仍然是霸主。

原文:Serdar Yegulalp

]]>
Learun,一款专注于业务,不用写代码的框架 http://blog.okbase.net/learun666/archive/56376.html learun666 2019-12-11 16:54:00  

​其实还是很因为懒,才会有这个项目框架的产生,每次开启一个终端的小服务都要整理一次框架造成重复的,不必要的,缺乏创造性的劳动。SO,本着可以用,用着简单的原则就设计了这套敏捷开发框架,希望有需要的朋友可以看看,关心自己的业务规则即可。

Learun框架简介:

面向应用开发(OA、网站、电子政务、ERP、CRM......)提供基于B/S构架的应用软件系统的快速开发框架。

http://img3.mukewang.com/5df0a77900014c1419201080.jpg

可用于实施基于ASP.NET MVC的分布式/微服务项目开发、重构等等,可以通过代码生成器生成业务模板,稍做调整即可关注业务进行API开发。

项目应用价值:

避免重复开发,降低开发成本,权限模块是每个应用系统的不可缺少的部分,但每个客户对权限管理的需求却不完全相同。 如果按需从头分析和设计,必将造成重复开发。BPMS通用基本权限系统针对不同应用系统设计, 提供用户、角色权限模块的基础框架和通用模型,帮助开发者快速实施和开发出符合不同需求的用户权限管理模块。 能够最大程度降低开发工作量,节约开发成本。

开发环境技术:B/S(.NET C# )

语言:.net、C++、C#

开发环境:Visual Studio 2012

数据库:sqlserver2005/oracle11h/mysql4.5及以上版本

操作系统:Microsoft Windows Servsr 2008R2及以上

提供功能:

用户登录/修改密码/退出

菜单管理/用户管理(数据授权、权限授权、新增用户)

用户安全控制(重置密码、用户操作异常锁定、修改密码等)

权限管理中心(自定义表单权限、普通权限)

精细化权限控制,控制到按钮的显示

数据字典管理/单据编码管理

登录日志/操作日志/访问日志/异常日志

文件上传/图片上传

通用导入导出excel功能

定时任务/任务管理/任务监控

]]>
企业信息平台的快速搭建,框架如何选? http://blog.okbase.net/learun666/archive/56374.html learun666 2019-12-5 15:41:00  

 Web端开发框架如何选

目前,大部分的企业信息集成系统都在web端运行,而搭建框架的选择对一个企业的发展至关重要,不过其最终目的都是要符合企业发展逻辑,助力企业战略的实施。

而在框架的选择上就是一个仁者见仁的事情了,就从底层框架来说,web层的就非常多,而且各有特色,比如:Struts、WebWork、Spring MVC、Tapestry、JSF、WebPage3.0……等等。

那么为什么要使用框架呢?

使用框架的必然性

框架,即framework,说白了,其实就是一些应用的半成品。通常情况下,为了方便应用,会把不同应用程序中一些共性的东西剥离出来,做成一个半成品程序,这样的半成品就是程序框架。当然,这些东西有免费的,也有付费的,免费的在功能上和后期维护上需要更多的心思,而付费的通常由一些开发企业做优化,开发一些标准功能,再加上一定的拓展,维护成本上会更低一些。

目前,软件系统的发展已经相当复杂了,特别是服务器端软件,涉及到的知识,内容,问题太多。在某些方面使用别人成熟的框架,就相当于让别人帮你完成一些基础工作,而你只需要集中精力完成系统的业务逻辑设计。这样每次开发就不用白手起家,而是可以在这个基础上快速搭建。

这样一方面可以减少重复开发工作量、缩短开发时间、降低开发成本,另一方面也可以使程序设计更合理、运行更稳定,减少了人员流动所带来的困扰。基于这些原因,基本上现在在开发中,都会选用某些合适的开发框架,来帮助建立快速高效的开发应用系统。

那么有了这些必然性,选择就很重要了,在web层的开发框架中,有一些基础思想很值得注意。

1.数据展示

Web层需要从逻辑层获取需要展示的数据,然后以合理的方式在页面进行展示,要做到分类明确,抓取精准,使用方便,界面简洁。

2.人机交互

人机交互,其实是说的软件智能化。比如用户要在界面上输入数据,并在界面上进行点击操作,那么就可以触发事件,建立标准的事件驱动模型,然后自动与后台机型数据交换处理,从而完成新界面的建立。

3.收集数据,调用逻辑层接口

这个过程的触发和用户的操作请求是同步的。通常web层收到用户的请求,便需要相应的逻辑层接口来处理,因为本身web层是不会进行任何逻辑处理的,这其实也是前后端的差异。而调用逻辑层接口,需要传递参数,这时需要收集用户在界面上输入的数据,然后进行组织,组织成为逻辑层接口需要的数据封装形式,这种形式有很多,常用的是ValueObject。

4.根据逻辑层的数据来重新展示页面

逻辑层处理完了,但是前端显示依然没有变化,这时候需要将数据或信息重新返回到展示界面上,界面再将数值分配到具体的位置,新的页面便展示出来了。

其实通过以上我们也可以看出来,web层的开发工作重要集中在展示上,也就是图形用户界面,这是用户最直观的感受应用程序的窗口,通常也是用户要求比较多的地方之一,其表现形式相对丰富。

 Web层开发步骤

其实,任何项目从零开始,开发步骤都大同小异,只是有条件的企业会采用同步开发的模式,以节省时间,这里以基础模式为例,简述一下。

1. 确定展现内容,写页面Html

2. 每个数据的具体表现形式,如:有的需要表现成为下拉列表,有的需要表现成为单选按钮等。

3.界面表现形式的逻辑布局,所谓逻辑布局是指某些数据的表现形式应该放在前面,某些应该放在后面;某些放在上面,某些放在下面。如:某个请假申请 的业务,有请假开始时间和结束时间,很明显开始时间的表现就应该排在结束时间的前面。而美工是负责最后页面的美观,一般美工不能动界面的逻辑布局。

4.完成前面3步,页面的表现形式的大致模样就有了,下面需要来做功能性的开发。第一个就是这些表现形式的值的来源,如:下拉列表显示的值从什么地方来。值的来源方式很多,有数据库中来、固定值、某断程序运行的中间结果、前面页面传递过来等等,当然典型的还是来自数据库。

好了,确定了值的来源,开发人员就要写代码来获取这些值,然后把这些值赋值到对应的表现形式里面。

5.还有一些比较特殊,也就是真实操作的是一类值,但是在界面上显示的是另一类值,比如:数据库中有用户编号,到了界面上就得显示用户姓名,但是所 有的操作都是要操作用户编号的。我们把这种情况分做:真实值和表现值,他们有一定的内在联系。这些都是要开发人员去转化和维护的。

6.接下来就应该开发功能性的事件响应了。用户点击了某个按钮或者触发了某个事件,首先是客户端:数据检测、客户端事件处理;然后提交到服务端,服务端要获取到客户端提交的数据,然后调用相应的逻辑层接口来响应。当然如何写逻辑层的实现这里就不去谈论了。

7.逻辑层执行完过后,返回数据和信息到Web层,开发人员还需要写代码去处理,选择哪个页面来显示,如何显示这些数据和信息等。

8.在整个交互的过程中,还必须考虑到如何控制权限,如:某些数据不能显示,某些数据不能编辑等等;同样还需要考虑到消息的配置和国际化等等。这些功能起源于逻辑层,但是实际的控制要到Web层,这些都需要开发人员来控制。

9.完成了上面的开发步骤,页面基本的功能开发就告一段落,接下来开发人员需要考虑页面美观的问题了。大家可能会说:“不是有美工吗,还需要开发人 员干什么?”。事实上美工多半只能出一个静态页面的美化模版,美工对于一推Java代码和Html的混杂物,多半是没有办法的,更不要说还有一些内容是动态生成的,美工就更不可能搞定了。还是得开发人员上阵,按照美工给的模版,开始添加Css:class、id、style……

10:完成上面的开发,基本页面的开发工作就完成了,最后的一个步骤就是把各个页面有机的组织起来,开发应用程序的整体应用导航框架,通常就是菜单,然后把各个功能页面跟菜单结合起来,形成一个完整的应用。

在这里我们省略了开发期反复的调试过程,仅总结开发的步骤。

选择Web开发框架的目的

首先,没有框架,我们需要做的工作是什么,了解了这些,我们才能更好的明白框架的价值。

框架,通俗地讲,就是一个半成品,也就是组成一个机器的零件。目前我们使用的框架无论是基础的底层框架,还是融合类型的付费框架,莫不如此。

而框架的选择,要看项目的实际需求,底层框架适用于时间充裕的项目搭建,融合框架(快速开发框架)适用于短期项目,从成本上来说,通用型融合框架可以减少开发的工作量,提高工作效率,因为其本身已经融合了多种常用功能,ERP、OA、CRM、BI、甚至移动APP等,对企业来讲,可操作性更强。

选择Web开发框架的标准

标准不是一成不变的,这里也只是经验之谈,而且主要出发点在融合框架的业务功能方面,所以仅作参考之用。

1.选择能够对我们的开发过程提供更多、更好帮助的Web开发框架,功能性,稳定性要强。

2.Web开发框架的学习一定要简单,上手一定要快,毕竟,没有人愿意在复杂错乱的框架结构中摸索,一个成熟的融合框架,如果需要半个月甚至一个月的学习周期,那这个框架确实有需要商榷的地方。

3.良好的技术支持。框架无论好坏,技术支持一定要做好,因为等你使用起来就明白,无论多好的框架,在实际的应用过程中,都会或多或少的出现问题,如果不能及时的解决,会对整个项目开发带来影响。

此外,一定要考虑综合成本,其实这是目前应用开源软件最大的问题,碰到问题除了死肯文档就是查阅源代码,或者是网上搜寻解决的办法,通常一个问题就会导致1-2天的开发停顿,严重的甚至需要一个星期或者更长,一个项目有上这么几次,项目整体的开发成本嗖嗖的就上去了。

4.Web开发框架结合其他技术的能力一定要强,比如在逻辑层使用Spring或者Ejb3,同时框架整体也要很容易的与它们进行结合。

5.强大的拓展功能。就像刚才所说的,再好的框架都不可能做到面面俱到,况且每个企业的实际情况都有所不同,因此这就要求框架的拓展功能足够强大,以满足新业务的需求。但是,此处要注意一点,扩展一点要简单,如果因为扩展功能而使框架整体功能受限,硬塞上去也是不合适的。

6.Web开发框架最好能提供可视化的开发和配置,可视化开发对开发效率的提高,已经得到业界公认,况且这一功能目前来说已经相对成熟,不多赘述。

7.Web开发框架的设计结构一定要合理,应用程序会基于这个框架,框架设计的不合理会大大影响到整个应用的可扩展性。

8.Web开发框架一定要能很好的结合目前公司的积累,可以有良好的项目对接。通常情况下,公司在多年的开发中已有了很多积累,不能因为使用Web开发框架就不能再使用了,那未免有些得不偿失。

9.不要把框架想的神了。可以肯定的是,目前市面上的所有框架都不可能做到十全十美,也不可能适用所有应用场景,所以在选型前一定要了解它的适用范围,判断是否合适。

 这里给大家推荐一款我公司使用的敏捷开发框架learun,谨作选型参考,免费体验地址:http://www.learun.cn/Home/VerificationForm

]]>
企业软件工作流学习开发实用篇 http://blog.okbase.net/learun666/archive/56370.html learun666 2019-11-25 16:32:00  

​不久前,公司采购了一套OA系统,我们主要就是想工作流用起来,把公司制度流程化。

而我个人经过一个月的学习对于工作流也有了一定的理解,知道工作流由表单和流程引擎组成。而表单是数据的载体,数据通过流程引擎进行审批流转。

但是在使用过程中我也遇到了很多问题,首先是界面,买来的工作流的界面确实是不太美观,另外我们还有很多其它业务系统,希望能通过一个统一个的工作流引擎来进行业务流转,但是这个OA也没法实现。

所以我们痛下决心,自己开发了一套工作流框架,并兼容app功能,引入多套UI,这样再也不怕以后的系统变更了。

http://img2.mukewang.com/5ddb8dd200017d4b10102132.jpg

http://img4.mukewang.com/5ddb8dd20001911e10102132.jpg

http://img3.mukewang.com/5ddb8dd2000113cb10102132.jpg

 

http://img1.mukewang.com/5ddb8dd300017f3c10102132.jpg

工作流引擎使用方法(以请假流程为例)

先设计一个请假单,用于流程中进行流转,点击左侧表单应用一表单设计。

http://img2.mukewang.com/5ddb8dff000113d419200922.jpg

选择新增。

http://img3.mukewang.com/5ddb8e09000162a319200922.jpg

对表单进行基本信息的设置。

http://img4.mukewang.com/5ddb8e140001dc0519200922.jpg

http://img3.mukewang.com/5ddb8e140001872e19200922.jpg

进行对表单界面的设计。(可直接拖拽)

http://img3.mukewang.com/5ddb8e200001364e19200922.jpg

请假单设计完成。

http://img3.mukewang.com/5ddb8e2a0001547319200922.jpg

下面就是工作流的设计了,左侧点击流程应用一流程设计。

http://img3.mukewang.com/5ddb8e36000150c519200922.jpg

http://img4.mukewang.com/5ddb8e360001842f19200922.jpg

点击新增,进入流程设计界面,填写流程基本信息,只需要单的SQL语句即可。

http://img4.mukewang.com/5ddb8e4900011a5b19200922.jpg

选择可发起流程的人员、角色或岗位。

http://img3.mukewang.com/5ddb8e5d0001392619200922.jpg

绘制请假流程图,进行对流程的基本设计。

http://img1.mukewang.com/5ddb8e6500010ae219100880.jpg

双击节点,进行权限设置。

http://img.mukewang.com/5ddb8e74000199d319200922.jpg

http://img3.mukewang.com/5ddb8e750001801c19200922.jpg

http://img1.mukewang.com/5ddb8e75000121b619200922.jpg

点击保存,设计完成。

http://img3.mukewang.com/5ddb8e860001fb5219200922.jpg

流程全部采用可视化设计,界面交互友好、便捷。

设计好的流程,可以在平台的流程应用中发起、审核、委托流程等,简洁实用。

后期,更多功能会逐步进解,喜欢的朋友可先行体验。

地址:https://www.learun.cn/Home/VerificationForm

]]>
.Net Core加持,LR代码生成器功能简析 http://blog.okbase.net/learun666/archive/56368.html learun666 2019-11-22 15:04:00  

​当前,很多开源的框架和公司内部框架都会有自带的代码生成器功能,之所以受欢迎是因为它为程序员提供了一个偷懒的工具,当然,它也是一种敏捷开发的体现。它不会在乎项目的业务是什么,它关注如何创建文件和一些自动写好的方法,解决了重复劳动的难题,释放无聊的 CRUD 功能的编写。

软件开发行业和建筑业很像,都分设计和施工两个阶段,但区别在于建筑业80%的价值聚焦于设计环节,而软件行业80%的资源花在了开发阶段,代码生成器的作用就是进一步压缩开发阶段的时间和成本。

http://img1.mukewang.com/5dd7807d0001ae6919200922.jpg

LR敏捷开发框架中的代码生成器为内置基础核心功能之一,共设计了7个模板,侧重点各有不同。

http://img1.mukewang.com/5dd780850001e08219200922.jpg

自定义开发模板拥有较高的开放性(通过设置生成单表或多表的增删改查功能),点击“配置”按钮之后,跟着引导即可逐步完成相关功能的设计。表单部分采用拖拽设计,保证操作的便捷性。

http://img1.mukewang.com/5dd7808d0001c62a19200922.jpg

http://img3.mukewang.com/5dd780950001d1e219200922.jpg

http://img2.mukewang.com/5dd7809c00017cb519200922.jpg

http://img1.mukewang.com/5dd780a30001db0e19200922.jpg

http://img2.mukewang.com/5dd780aa0001655519200922.jpg

http://img1.mukewang.com/5dd780b30001d96119200922.jpg

http://img1.mukewang.com/5dd780bb00010a6619200922.jpg

http://img3.mukewang.com/5dd780c20001507e19200922.jpg

模板生成后直接保存即可,可在模板中查看代码。

其他模板

快速开发模板--快速生成必要的类和页面。

实体生成模板--根据数据库快速生成实体类和映射类。

流程系统表单模板--通过设置生成流程的系统表单。

EXCEl风格模板--通过设置生成编辑列表页。

报表模板--通过设置生成报表显示页。

移动开发模板--通过设置生成单表或多表的增删改查功能(移动端)。

更多功能:www.learun.cn/Home/VerificationForm.

]]>
这款APP与PC端同步,真的好用 http://blog.okbase.net/learun666/archive/56367.html learun666 2019-11-21 10:59:00  

​力软于去年的七月份就推出了移动端的敏捷开发框架(力软移动APP2.0),这款APP是和PC端是相连的,并且PC端和移动端是同属于力软框架的,PC端开发的功能会同时在移动端同步生成,做到同时开发同时使用。

http://img4.mukewang.com/5dd3ae0e000122a504370737.jpg

http://img3.mukewang.com/5dd3ae0f00011d0c11160748.jpg

http://img3.mukewang.com/5dd3ae0e00012ca203640647.jpg

http://img4.mukewang.com/5dd3ae0e000185e503700645.jpg

力软APP开发环境支撑vs2017以上的版本,支撑数据库sqlserver2005\oracle11g\mysql4.5 及以上版本。WebApi 的接口为nancy,使用Js 框架:jquery mobile,封装工具:cordova 。

http://img1.mukewang.com/5dd3aee00001ca8003180566.jpg

]]>