权限管理、用户权限系统、开源用户权限系统、信息化建设标准基础数据管理平台
代码改变世界

随笔分类 -  [05] 走火入魔技术架构

开发软件项目过程中的开发辅助工具的威力【以数据集权限为例,人工输入花费几个小时输得眼花缭乱,电脑生成花费5分钟轻松搞定】

2011-05-24 14:34 by 通用C#系统架构, 4608 阅读, 收藏, 编辑
摘要: 为了实现记录级权限的条件约束功能,为了实现下面的页面效果,我们需要在数据库里设置一些数据,甚至需要人工录入一些大量数据才能达到下面的页面效果。 人工输入数据最大问题是耗费很多时间,而且未必有人有空录入这些数据,还需要给录入的人讲解注意事项等等,最糟糕的是很容易录入错误的数据,其次我们的数据结构、字段注释等也会总是变来变去的,若数据库结构等变了后这些数据又需要重新校对,那是足够要命的事情了、头都大的事情。 那我们就花费几个小时时间编写一个工具,可以在几秒钟内产生好所有的表字段结构说明,生成好的SQL语句在查询分析器里一执行就可以轻松搞定。而且做好的工具还可以分享给300-400个有偿购买组件的. 阅读全文

C#.NET 剪切板复制粘贴泛型的例子代码参考 Clipboard Copy Paste List

2011-02-23 17:54 by 通用C#系统架构, 6146 阅读, 收藏, 编辑
摘要: 我们经常希望我们的软件有复制粘贴功能,可以把一个角色(用户组)里的用户全部复制粘贴到另外一个角色(用户组)里,若软件有复制粘贴的功能,操作起来会非常方便,所以在走火入魔通用权限管理系统组件源码里,也有类似的复制粘贴的例子代码,有需要的可以参考下面的代码实现,虽然代码很简单,但是也折腾了1天才调试好,希望能对有需要的人有些帮助少浪费宝贵生命,及时找到需要的资料。 //这里判断是否有数据被复制objectclipboardData=Clipboard.GetData("userEntites"); this.btnPaste.Enabled=(clipboardData!=nu 阅读全文

以前搞Delphi就没见过这么强大的用户权限系统,学C#才一个月,通用权限管理系统组件源码工具很强

2011-02-19 23:15 by 通用C#系统架构, 3499 阅读, 收藏, 编辑
摘要: 界面上的所在单位四个字在哪里改?界面改了没用?Ψ吉日嘎拉23:02:47语言包在语言包里修改语言包在那里知道不?山泉23:03:07哦,在哪里?Ψ吉日嘎拉23:03:06按窗体的名字找语言包山泉23:03:27我看看,这套系统很强大且复杂Ψ吉日嘎拉23:03:35D:\DotNet.Common\DotNet.CommonV3.2\DotNet.WinForm\Resource\Localization在这个目录里可以在vs2010里直接修改山泉23:04:13我找找看Ψ吉日嘎拉23:04:17几下就找到了山泉23:08:13找到谢谢Ψ吉日嘎拉 阅读全文

一个用户的上级部门的上级部门对用户也有修改权限,怎么判断?

2011-02-19 13:11 by 通用C#系统架构, 1018 阅读, 收藏, 编辑
摘要: 山泉13:06:17一个用户的上级部门对用户有修改权限一个用户的上级部门的上级部门对用户也有修改权限,怎么判断?山泉13:06:30主要是第二山泉13:06:45怎么设置?Ψ吉日嘎拉13:07:30这个是权限范围的概念山泉13:07:37恩Ψ吉日嘎拉13:07:39数据集权限山泉13:07:57程序中怎么判断呢?山泉13:08:06能否举个例子,谢谢Ψ吉日嘎拉13:08:161:定义一个操作权限,设置为数据集权限。2:然后哪个人,可以管理哪些范围,按组织机构设置。3:这个人都能管理哪些组织机构,哪些人,都有函数Ψ吉日嘎拉13:08:36web里有例子,你 阅读全文

设计模式在软件应用系统开发中的实战参考

2011-01-09 22:31 by 通用C#系统架构, 3564 阅读, 收藏, 编辑
摘要: 晚上在武汉飞往杭州的飞机上感觉有些无聊,这次总算是见到一位美女空姐了,的确很漂亮看着赏心悦目,无聊了就写一篇博客到杭州家里发布上去,就写一篇设计模式在实际应用系统开发中的例子。 其实真正能看懂设计模式并熟练应用设计模式并不是一件很容易的事情,因为大部分的日常开发工作不集合设计陌生等都可以达到目的。 当有一些特殊需要时,若不采用设计模式的思想,的确是比较难实现或者及时实现了代码也会非常臃肿,甚至让人不好理解阅读。 假设我们有一个客户端程序需要有多种运行模式的兼容支持,而且只需要写一份程序,而不是针对不同的发布模式写不同的客户端代码,毕竟同时维护4套客户端程序是要命的事情若能写一套客户端程序是最理 阅读全文

软件项目开发无成熟框架套路之成本代价

2011-01-08 16:05 by 通用C#系统架构, 1451 阅读, 收藏, 编辑
摘要: 很多年前刚毕业没多久时也参与组织了一个小型的信息管理系统,就是家政管理系统,整个项目组有6个人,由于当时经验不足,也没成熟的软件开发套路,很多技术也都略懂一二但是多人同时开发同一个项目的经验实在不足,当然更没开发过大型软件项目的经验,更多是擅长写一个小功能、完成一个小模块而已的水平而已。 阅读全文

数据字典(选项)管理 的具体使用方法介绍 - 以审批流程类别管理为例(工作流类型管理)

2010-11-12 14:23 by 通用C#系统架构, 5351 阅读, 收藏, 编辑
摘要: 我们的管理系统,经常需要维护很多种选项数据管理,例如 用户的籍贯、学历、学位、名族、性别、党派、等等一大堆选项的管理,若我们的软件有非常灵活控制管理这些基础选项的功能,那是非常理想的。 阅读全文

C# ASP.NET 通用权限管理系统组件源码中WCF例子程序客户端运行详细配置参考

2010-11-01 09:28 by 通用C#系统架构, 3417 阅读, 收藏, 编辑
摘要: WCF的客户端、服务器端的整体整体逻辑图、架构图如下: 当年水平还很菜的时候,就不知道如何让程序在真正的客户端服务器端模式来运行,就是所谓的用2台电脑或者更多的电脑来运行整个系统,把核心程序都写在服务器端,然后让客户端来调用服务器上的程序,工作很多年后,有一天真的会这个功能了,很开心很开心。 阅读全文

C# ASP.NET 通用权限管理系统组件源码中WCF例子程序服务器端运行详细配置参考

2010-10-31 22:17 by 通用C#系统架构, 3560 阅读, 收藏, 编辑
摘要: WCF的客户端、服务器端的整体整体逻辑图、架构图如下: 阅读全文

【商业版、提供全部源码】1000元RMB购买走火入魔C#.NET精品即时通讯组件功能源码的老大哥哥今天很高兴,还特意表扬了程序很强大、很好用、支持局域网、支持广域网

2010-10-27 00:06 by 通用C#系统架构, 2859 阅读, 收藏, 编辑
摘要: C#.NET简易即时通讯的运行效果图如下 http://www.cnblogs.com/jirigala/archive/2010/10/17/1853540.html 有个内蒙自治区呼和浩特市做通讯工作的老大哥,花费1000元购买了C#.NET通用权限管理系统组件及C#.NET即时通讯组件功能的所有源码,老大哥是比我大10岁,都接近40岁的人了,虽然也会写程序但是一直用的是VB,而且最近几年也不写程序了,可能开始做一些其他日常维护工作了。 阅读全文

通用权限管理组件支持SqLite,感谢完善者岩子(250952377)为软件改进做出的重大贡献

2010-10-19 17:37 by 通用C#系统架构, 1735 阅读, 收藏, 编辑
摘要: 权限组件客户咨询通用权限管理组件中的数据库访问组件相关的技术问题,同时打开多种数据库相关的问题,我就热情的给客户做解答交流,在设计时通用数据库访问组件就是可以同时打开多个多种数据库的,哪里应该如何修改、注意哪些事项,哪里有什么例子都沟通了一下,客户也很满意。 阅读全文

第8章 C# .NET 开源可进行二次开发的即时通讯组件提供全部源码下载

2010-10-17 12:26 by 通用C#系统架构, 11604 阅读, 收藏, 编辑
摘要: 提供所有的C# .NET相关源码并提供一年的技术服务,有需要的可以在淘宝上购买,淘宝上的购买地址为 http://jirigala.taobao.com/ 即时通讯功能主要是为了实现管理系统的通知信息能即时发送给相应的用户账户,为了实现即时高效的通知功能。虽然与真正的商业化的即时通讯软件无法匹敌,但是往往内部个性化的管理系统,还是需要即时通知、即时沟通的需要。 阅读全文

多年一直想完善的自由行政审批流程组件【2002年PHP,2008年.NET,2010年完善数据设计、代码实现】

2010-10-08 23:38 by 通用C#系统架构, 13998 阅读, 收藏, 编辑
摘要: 几乎没一个公司,什么事情都一个人说了算的,都需要大家一起协商、协调才会最终生效,都需要走一个流程的,这也是管理软件需要流程审批组件的原因。 阅读全文

3天搞定的小型B/S内部管理类软件定制开发项目【软件开发实战10步骤详解】

2010-10-07 21:39 by 通用C#系统架构, 82469 阅读, 收藏, 编辑

 

 

   十一休假,杭州西湖边逛了一圈只能用人山人海来形容,浙大紫金港校区也逛了一圈风景如画,建设得真不错很棒,假期就去了这2个地方,然后在家里陪老婆、看孩子、洗尿布、打了几局星际争霸,在网上接了一个B/S架构的内部管理类定制软件、淘宝上收了600元辛苦费后就开始行动了、现在把整个开发过程讲解分享如下文。

 

客户需求

   一个简单的项目管理信息的,添加、删除、编辑、查询等功能的实现,把大的框架做好就可以,细节他会自己完善好,想想也很简单的一样,本以为1天时间就足可以搞定了,结果足足干了3天才算竣工,由于客户也是软件开发人员,沟通起来也比较顺畅一些,否则可能不止需要3天了。

 

   项目虽然很小,但是由于跟我的主营方向是一致的,同时也想锻炼一下做项目的成熟程度有多高、有多快,所以也没嫌弃钱多钱少,开开心心就把这个项目开始启动了。项目虽然小但五脏俱全来形容了这个活儿了。

   很多必要的功能虽然在需求里没有提到,但是都是需要做好的,例如:

         01:系统的登录功能、这个是必然要有的。

         02:记住密码功能,而且是需要有加密功能的。

         03:退出系统的功能,总需要能安全退出系统的吧。

         04:用户管理功能,例如哪些用户才能登录到系统里来?

         05:用户修改密码功能,停用功能,设置密码功能等。

         06:用户可以访问那些菜单等?

         07:用户有哪些操作权限等?

         08:角色管理功能,用户角色关系功能,角色的权限功能。

         09:友善的菜单导航功能。

         10:没有权限的友善提示功能。

         11:附件的管理、上传、下载、删除等等。

         12:查询分页功能等等,虽然都没提出,但是这些功能都需要做好的。

 

 

整体开发思路

 

数据库分2个设计:业务数据 + 权限数据,互相不干扰,相互比较独立一些。

整个系统分3个种干系人: 开发人员 + 系统管理员 + 操作人员,他们对系统各自的期望值及操作的内容如下图。

为了快速搞定项目,毕竟项目的预算很有限,所有有些功能模块能不开发就不开发,那我们就用现成的成熟组件,通用权限管理系统,做为用户账户管理、权限管理

菜单管理的核心组件,这样可以大大的提高工作效率,可以灵活配置管理这个小型B/S项目信息管理系统了。

 

 

项目的具体开发制作步骤

 

步骤1:项目虽然很小,但是还是按规范的软件开发步骤比较好,我们还是本着先有设计后有开发的思路,先不急着写代码,我们先把数据库结构设计好,本系统应该只设计一个表就可以了,我们先要想好哪些数据用什么格式保存,都需要哪些字段来表示各种属性,效果图如下,我们用了数据库建模工具PowerDesigner,来设计我们的业务模型中的数据模型吧,这就是所谓的开发上的领域模型吧,其实这个设计还是蛮关键的,设计乱了后面都会乱套了。

 

步骤2:通过用设计好的模型,我们先手工建立相应的数据库及数据表。

 

步骤3:下图是已经建立好的数据的效果图,Project是业务数据库、Project表是项目信息表,后面的Base_Sequence 用于产生序列及唯一排序号、Base_Comment 用于修改记录保存功能,这些不用重复设计,直接从UserCenterV30数据中心里复制过来结构就可以了,为了在软件里显示一些数据出来,可以通过手工方式先录入一些演示数据,这样成就感会更多一些、信心也更足一些,因为很快就可以在软件里显示数据出来了。

 

步骤4:生成好相应的数据表后,可以用代码生成器生成一些没有多少商业逻辑的代码了,所谓的添加、删除、修改、查询的代码都不用写了,直接用代码生成器生成好就可以了,虽然这个技术不怎么先进,但是省事省心,对技术的要求也很低,生成好的代码也比较规范一些,而且还支持多种数据库,还是蛮好的,若生成好后,数据库结构有变化了,也没关系,重新生成一下就可以了,生成代码1分钟足够了,顶多是命名空间可能需要整理一些就可以了,属于是很经得起折腾的做法了。

 

步骤5:将生成好的代码,复制到相应的位置上,适当的修正一下命名空间什么的,因为是一个很小的项目,根本不用分层啥的,分那么多层也是多余的,其实分目录就足够可以了,若很懒惰的话目录都可以不用分了,分层其实更适合大型软件项目,小项目以见效最快为主,没必要搞个7-8个层,这里是是1个层也没分,只是分了一些目录,显得思路更清晰一些。

 

步骤6:代码生成器不能生成所有的代码,有些代码还是有商业逻辑的,需要人工编写,其中ProjectManager.cs 中的代码就是有具体商业逻辑的代码,这部分代码无法靠代码生成器自动生成好,需要按自己的需要进行编写的,这里有2个功能,一个是查询功能的实现、另一个是更新数据时需要有修改记录的功能,需要详细记录数据被变更的全过程,这些代码都需要人工编写好,页面上会调用这些代码。

 

步骤7:接下来该是规划整个系统的菜单的时候,需要好好规划一下软件的菜单,到底需要有哪些菜单,都叫什么名字?当然这一步也可以在在最后做,我们同通用权限管理组件可以灵活规划整个系统的菜单,基本上想怎么设置就怎么设置,想怎么托摘、想怎么排序都可以,规划菜单时会很爽,当然不只是开发人员用起来爽、而且系统管理员今后维护时也会很爽,系统的整个菜单都可以灵活配置权限、可以灵活更改,而不是写死的菜单,将来不依赖开发人员也可以灵活配置管理,灵活设置各种权限限制等等。

 

步骤8:接下来,需要把相应的添加、修改、查询、删除功能页面做出来,可以考虑到今后可能会扩展很多模块进来,所有目录规划得合理一些,说不定还要做人事管理、考勤管理、薪资管理、工作日志管理等等很多模块,其实都是大同小异而已,更多是技术是体现在细节功能及业务逻辑的深入程度上。

 

步骤9:菜单配置好,页面制作好后,就可以实现登录系统的页面了,当然这个也是用了现成的通用权限管理系统的登录页面,只需要制作一个登录界面,然后调用相应的登录API就可以了,自然就可以达到离职人员不能登录、没有权限的用户不能登录、停用账户不能登录,不能重复登录、限制登录的IP地址等等额外的其他功能都可以集成在里面了,开发人员也不用关心更多的细节,省心省事了。 

 

步骤10:登录好后,通用权限管理系统的底层API,自然会显示有权限的菜单,无权访问的菜单也不会出来了,哪个用户可以访问哪个菜单等等,都可以通过通用权限管理工具灵活配置管理,当然那个工具是给系统管理员、开发人员、实施人员使用的,并不是为了给普通业务操作员使用定位的。软件的最终运行效果就如下图了,由于是系统管理登录的所有菜单都能显示了,当然这里还需要一个成熟稳定的分页组件。

 

 

   底层代码生成器生成的代码,可能只占用这个系统的代码的 1/3左右,但是编写这些代码的时间也省了,整个开发过程不是可以节省1/3了,而且是纯体力劳动而已。整个权限管理等可能需要整个系统开发的1/3左右的精力,若这部分也不用开发了,又可以节省整个软件项目开发的1/3时间。整个框架的稳定完善,也可以说是占用整个软件开发项目的1/3时间是应该的,若是2手空空开始开发的话。

   那我们的项目采用了 代码生成器 + 数据库访问组件 + 通用权限组件 + 成熟的B/S开发框架 足足可以节省一个管理软件项目开发的 2/3 的开发时间,可以把精力全部放在另外的 1/3 的业务逻辑优化、界面细节优化上。

   这样也大大的降低了软件项目的开发的失败风险,谁说你不会在前面的2/3时间上失败呢?未必能走到后面的1/3时间上来啊,对吧。  

 

开发总结

 

  目前3天内搞定一个独立的内部管理系统,而且五脏俱全的是我从业10年左右的最快记录,当然若第二次做类似的东西,可能有希望2天内可以搞定了。

 

  经过多年的积累,手上才会有一个运行稳定、可以灵活配置的B/S开发架构,虽然看看都很简单,但是最起码不断完善几年后,才会达到铜墙铁壁的程度,我们经常会发现,开发一个小小的软件,往往1个月也开发不完,很可能是由于没有稳定的B/S开发架构导致的,这个架构也不是说技术,就是一个美观的整体效果良好的运行稳定的B/S系统吧,从头开发的B/S架构,由于需要调整很多细节环节、特别是页面、菜单的美观设计等上会耗费很多精力。

   有时候界面设计良好、程序思路严谨、用户交互效果好的B/S空框架也能卖出几万元,以前不能理解,现在是彻底能体会了,稳定的B/S架构的确可以值一些钱,因为是经过精雕细刻后才能形成最后的劳动成果的。

 

   软件的大体效果做到这里,大概花费了3天时间、接下来可能要花费的时间会更多,应该不止3天了,可能是30天,因为很多业务上的细节会耗费很多时间来调整,例如新增页面的先后输入的内容,页面输入的检查、页面的美观设计、光标的顺序优化、回车优化,输入内容的完善补充等等,查询页面的排序顺序优化、查询内容的先后顺序排版、表格中各列的宽度调整,一些提醒颜色的优化等等会有很多细节问题上还要耗费很久时间的, 做软件其实就是做细节,你需要有一个良好的B/S开发框架,否则全部自己弄,不知道什么时候才能弄好,有个良好的框架、再有良好的例子程序,整个管理系统,就是一个量的问题了,其次就是很多细节的优化上,会花费很多时间。

   

    有良好的稳定的B/S开发框架,前期工作只用了3天,若没有这个,从头开始做,可能30天也做不完,更不会把大多精力都花费在业务逻辑的细节优化上,可能更多的精力都耗费在B/S系统架构的稳定、优化上了,那这个软件的质量就更没保障了。

 

    有了稳定的B/S开发框架后,才好进行大规模生产、大量招聘人员做开发工作,若这些都没有,招聘来一大堆开发人员,那很可能局面就乱套了,大家就容易乱来了。

 

    ProjectManager.cs手工编写的商业逻辑代码如下:

代码
//------------------------------------------------------------
// All Rights Reserved , Copyright (C) 2010 , Jirisoft , Ltd .
//------------------------------------------------------------

using System;
using System.Data;
using System.Data.Common;
using System.Collections.Generic;

namespace Project
{
    
using DotNet.DbUtilities;
    
using DotNet.Manager;
    
using DotNet.Utilities;
    
using DotNet.Business;

    
/// <summary>
    
/// ProjectManager
    
/// 项目跟进表
    
///
    
/// 修改纪录
    
///
    
///        2010-09-28 版本:1.0 JiRiGaLa 创建主键。
    
///
    
/// 版本:1.0
    
///
    
/// <author>
    
///        <name>JiRiGaLa</name>
    
///        <date>2010-09-28</date>
    
/// </author>
    
/// </summary>
    public partial class ProjectManager : BaseManager, IBaseManager
    {
        
public DataTable Search(string userId, string searchValue)
        {
            
// 一、这里是开始进行动态SQL语句拼接,字段名、表明都进行了常量定义,表名字段名发生变化时,很容易就知道程序哪里都调用了这些。
            string sqlQuery = string.Empty;
            sqlQuery 
= " SELECT * "
                    
+ " FROM " + this.CurrentTableName
                    
+ " WHERE " + ProjectTable.FieldDeleteMark + " =  0 ";

            
// 二、我们认为 userId 这个查询条件是安全,不是人为输入的参数,所以直接进行了SQL语句拼接
            if (!String.IsNullOrEmpty(userId))
            {
                sqlQuery 
+= " AND " + ProjectTable.FieldCreateUserId + " = '" + userId + "'";
            }

            
// 三、这里是进行参数化的准备,因为是多个不确定的查询参数,所以用了List。
            List<DbParameter> dbParameters = new List<DbParameter>();

            
// 四、这里看查询条件是否为空
            searchValue = searchValue.Trim();
            
if (!String.IsNullOrEmpty(searchValue))
            {
                
// 五、这里是进行支持多种数据库的参数化查询
                sqlQuery += " AND (" + ProjectTable.FieldKeHuMingCheng + " LIKE " + DbHelper.GetParameter(ProjectTable.FieldKeHuMingCheng);
                sqlQuery 
+= " OR " + ProjectTable.FieldKeHuXiangMuMingCheng + " LIKE " + DbHelper.GetParameter(ProjectTable.FieldKeHuXiangMuMingCheng);
                sqlQuery 
+= " OR " + ProjectTable.FieldCreateUserRealname + " LIKE " + DbHelper.GetParameter(ProjectTable.FieldCreateUserRealname);
                sqlQuery 
+= " OR " + ProjectTable.FieldDescription + " LIKE " + DbHelper.GetParameter(ProjectTable.FieldDescription) + ")";

                
// 六、这里是判断,用户是否已经输入了%
                if (searchValue.IndexOf("%"< 0)
                {
                    searchValue 
= "%" + searchValue + "%";
                }

                
// 七、这里生成支持多数据库的参数
                dbParameters.Add(DbHelper.MakeInParam(ProjectTable.FieldKeHuMingCheng, searchValue));
                dbParameters.Add(DbHelper.MakeInParam(ProjectTable.FieldKeHuXiangMuMingCheng, searchValue));
                dbParameters.Add(DbHelper.MakeInParam(ProjectTable.FieldCreateUserRealname, searchValue));
                dbParameters.Add(DbHelper.MakeInParam(ProjectTable.FieldDescription, searchValue));
            }
            sqlQuery 
+= " ORDER BY " + ProjectTable.FieldSortCode + " DESC ";

            
// 八、这里是将List转换为数组,进行数据库查询
            return DbHelper.Fill(sqlQuery, dbParameters.ToArray());
        }
        
        
/// <summary>
        
/// 更新(带有修改记录功能)
        
/// </summary>
        
/// <param name="projectEntity">实体</param>
        
/// <param name="changeLog">修改记录</param>
        
/// <returns>影响行数</returns>
        public int Update(ProjectEntity projectEntity, bool changeLog)
        {
            
// 若不需要修改记录
            if (!changeLog)
            {
                
return this.UpdateEntity(projectEntity);
            }

            String changeMessage 
= String.Empty;

            
// 获取原来的数据
            ProjectEntity oldProjectEntity = this.GetEntity((int)projectEntity.Id);
            
if (oldProjectEntity.KeHuXiangMuMingCheng != projectEntity.KeHuXiangMuMingCheng)
            {
                changeMessage 
+= "客户项目名称被修改为:" + projectEntity.KeHuXiangMuMingCheng + " 原值:" + oldProjectEntity.KeHuXiangMuMingCheng + "<br>";
            }
            
if (oldProjectEntity.KeHuMingCheng != projectEntity.KeHuMingCheng)
            {
                changeMessage 
+= "客户名称被修改为:" + projectEntity.KeHuMingCheng + " 原值:" + oldProjectEntity.KeHuMingCheng + "<br>";
            }

            
if (oldProjectEntity.KaiGaiRiQi != projectEntity.KaiGaiRiQi)
            {
                
// changeMessage += "开改模日期被修改为:" + ((DateTime)projectEntity.KaiGaiRiQi).ToString(BaseSystemInfo.DateFormat) + " 原值:" + ((DateTime)oldProjectEntity.KaiGaiRiQi).ToString(BaseSystemInfo.DateFormat) + "<br>";
            }

            
if (!String.IsNullOrEmpty(changeMessage))
            {
                BaseCommentManager commentManager 
= new BaseCommentManager(this.DbHelper, this.UserInfo);
                commentManager.Add(
"工程管理", projectEntity.Id.ToString(), projectEntity.KeHuXiangMuMingCheng, changeMessage, false, String.Empty, falsethis.UserInfo.IPAddress);
            }

            
return this.UpdateEntity(projectEntity);
        }
    }
}

 

 

 

系统架构逻辑参考图【强调了领域模型+面向服务编程理念】

2010-10-06 13:39 by 通用C#系统架构, 5027 阅读, 收藏, 编辑
摘要: 10.1假期过得真快啊,一下子过去6天,还有一天休息就上班了,其实这个假期有春节那么长,但是没春节那么热闹而已,这今天杭州的天气不错,去浙大紫金港校区转了一圈,新浙大校区的确建得很不错,从家里打车过去只要12元就够了,算是很近了。 鼻炎一直没有彻底好,稍微有些闹心,网友希望能看到整个系统的逻辑图,我就画了一张,看看自己的思路是否足够严谨,希望能与大家都沟通多交流。 阅读全文

大恶人吉日嘎拉之走火入魔闭门造车之.NET疯狂架构经验分享系列之(十二)多语言支持

2010-05-26 14:32 by 通用C#系统架构, 1793 阅读, 收藏, 编辑
摘要: 虽然平时很少接触老外的项目、也很少碰到老外,但往往赚大钱的人是经常跟老外做买卖的人居多,他们大多需要网站是全英文的,我们往往上手有一个成熟的中文的网站或者软件,例如成熟的B2C网上购物系统,但是没办法也没精力再做一个全英文的系统维护,只能让手上的项目既能支持中文也能支持多语言版本,还是维护一套程序比较可行一些,同时维护改进好几套程序,还是有点儿难度、工作量。 阅读全文

大恶人吉日嘎拉之走火入魔闭门造车之.NET疯狂架构经验分享系列之(十一)插件模式集成

2010-05-25 10:22 by 通用C#系统架构, 2156 阅读, 收藏, 编辑
摘要: 其实我们大多情况下,都不想了解细节,只是能用就可以了,例如我们买了一个菜刀,只是为了做饭时用用,而并不想关心制作菜单过程中的细节、甚至炼钢的细节等等,通用权限管理组件也是一样的道理,只是拿过来能用、好用就可以了。 下面的程序是已C/S插件模式运行的参考,做了一个最简单的主程序,然后在主程序里调用各权限组件的实际运行效果。 阅读全文

软件编程走火入魔之:数据库事务处理入门(适合初学者阅读)

2009-10-03 20:33 by 通用C#系统架构, 5260 阅读, 收藏, 编辑
摘要: 培训机构是每年都花费几十万的广告费用在报纸上打广告,都是报社的重大客户,商场如战场,培训机构专门请了抢手记者写的文章,也是为了打垮竞争对手、排挤竞争对手,因为他们的学员都想退学费,跑我这里培训,那对培训机构又是几十万的损失,所以才会大动干戈、跟我干了一场文明的较量,来了个你死我活,我并不是骗了哪些学员,反而我培养了很多人才,他们大多都工作很好,干得也蛮不错的,甚至还有上万月薪的,真实生活里没人跟我像网上一样受骗上当的,倒是有几个感恩的人,真人都可以拉出来做证明,你跟我面都没见过,就觉得我骗人了,而且还很执着,我就有些好笑了,也不用脑袋想一想? 阅读全文

走火入魔通用权限管理不仅是权限设计更是总体设计规划、快速开发集成平台(集中控制体系)

2009-09-30 11:04 by 通用C#系统架构, 6541 阅读, 收藏, 编辑
摘要: 走火入魔通用权限管理系统架构的简易定位之:实现集中控制、减少基础数据的冗余(管理上的中央集权制),是行业业务软件集成的核心数据中心搭建管理配置用的配套工具。 阅读全文

大恶人吉日嘎拉之走火入魔闭门造车之.NET疯狂架构经验分享系列之(十五)ASP.NET分页控件

2009-09-29 15:34 by 通用C#系统架构, 5458 阅读, 收藏, 编辑
摘要: 很多人都觉得,我只会C\S不懂B\S,平常还是B\S的工作做得比较多一些,以前也是以B\S开发为主,主要是工作上经常要做一些C\S的维护工作,所以我写出来的代码,基本上都是B\S,C\S上都是通用的,架构软件系统也都会往2个方面都考虑,尽量代码是兼容性比较好,毕竟辛苦写出来的代码,能有比较高的重复利用率生命力会更长一些。 阅读全文


C# ASP.NET 通用权限设计、通用权限管理、通用权限组件、单点登录、集中式权限管理、统一授权体系、分级管理分级授权


微信扫一扫加好友



点击右上角即可分享
微信分享提示