为什么80%的码农都做不了架构师?>>>   

最理想的状态就是,大家的习惯是一致的,这样设计出来的东西别人好理解,好接手,更容易搞明白你的设计是什么意图,别人想在你的管理软件上做接口也更容易一些,集成多个软件系统也容易一些。

我们中国人的一个特色:谁提出个什么提议,大家都觉得不好,那你让他来吧,他更不行,就是你的这个不行,行的还没有,还没诞生,还在脑海里,这个坏习惯影响了严重我们的团队作战能力,反正我就不服,让我弄我也不会,就是你这个不行,哪里不行,我也说不出来,如何更行没有,那这个问题如何解决?多人协调配合方面,我们跟日本人、韩国人的差距很大,上大学时就被深深的影响过韩国人的团结。

有时候学会放弃是最大的进步,能提高效率,我比较支持秦始皇、成吉思汗、希特勒,都是统一方面的强硬派。

废话少说:
我经常用的字段有如下:需要注意的一点就是,你存的是ID,还是FullName?还是Code 应该区分开来比较好。
ID:主键,每个实体都有他唯一的标识码,就像我们的身份证号码,一般建议采用单主键,好做外键,设置数据库主外键关联约束。
Code:编号,可以不输入,但是不能重复,我有时候会用程序判断,有时候会建立唯一索引,这样也自动不能重复了。
UserName:登录名,用数字或者拼音,登录时方便输入,例如“jirigala”。
FullName:姓名,这是真实的姓名,例如“吉日嘎拉”。

CompanyID:这个数据当时是归属于哪个公司的,因为员工是有可能换工作,调公司的。
DepartmentID:这个数据当时是归属于哪个部门的。
WorkgroupID:这个数据当时是归属于哪个工作组的。
StaffID:这个数据当时是归属于哪个员工的。

Enabled:数据是否已生效,很可能输入的数据经过审核后才会生效的。
DeleteMark:数据是否被删除了,我不能把数据真删了,那就找不回来了。
AuditStatus:审核状态,审核流程放在另外表里,只是状态,写在这个表里了,按严格来说,状态也不应该放在这个表里,应该放在工作流表里。

Description:设计的字段再多,也永远满足不了客户不断在变化的需求,多弄一个备注字段,所有放不下的,没地方放的内容,全部可以塞在这个字段里了,否则你就是设置1000个字段,可能会出现第10001个需求。SortCode:

CreateUserID:这个数据是谁创建的?把主键记录起来,因为直接记录姓名,可能会有姓名重复的可能性,例如在内蒙古我的名字重复的概率就高很多。
CreateUserRealname:创建人的姓名,虽然有些冗余,但是在列表里显示数据很方便,现在硬盘也大,冗余一些也无所谓。
CreateDate:这个数据是什么时候被建立的,出了事情还能知道是什么时候搞出来的,公安是非常重视,什么时候人被咔嚓了,最好是能详细到几点,在什么地点发生的。
ModifyUserID:谁修改了数据?
ModifyUserRealname:谁?
ModifyDate:什么时间修改的数据?

审核状态我一般分,若觉得哪里不妥或者命名有错的,我马上修改:

Code
 1//------------------------------------------------------------
 2// All Rights Reserved , Copyright (C) 2009 , Jirisoft , Ltd. 
 3//------------------------------------------------------------
 4
 5using System;
 6
 7namespace DotNet.Common.Utilities
 8{
 9    /**//// <summary>
10    /// AuditStatus
11    /// 审核状态。
12    /// 
13    /// 修改纪录
14    /// 
15    ///        2009.09.04 版本:1.0 JiRiGaLa 重新调整代码的规范化。
16    ///        
17    /// 版本:1.0
18    /// 
19    /// <author>
20    ///        <name>JiRiGaLa</name>
21    ///        <date>2009.09.04</date>
22    /// </author> 
23    /// </summary>    
24    public enum AuditStatus 审核状态#region public enum AuditStatus 审核状态
25    public enum AuditStatus
26    {
27        /**//// <summary>
28        /// 01 递交成功
29        /// </summary>
30        SubmitOK = 1,
31
32        /**//// <summary>
33        /// 02 开始审核
34        /// </summary>
35        StartAudit = 2,
36
37        /**//// <summary>
38        /// 03 待审核
39        /// </summary>
40        WaitForAudit = 3,  
41        
42        /**//// <summary>
43        /// 04 审核通过
44        /// </summary>
45        AuditPass = 4, 
46        
47        /**//// <summary>
48        /// 05 已驳回
49        /// </summary>
50        AuditReject = 5,
51        
52        /**//// <summary>
53        /// 06 审核结束
54        /// </summary>
55        AuditComplete = 6,
56
57        /**//// <summary>
58        /// 07 撤销失败
59        /// </summary>
60        QuashFail = 7 
61    }
62    #endregion
63}
64
65

我都会把表结构定义也成一个文件,可以参考代码,当然这个是表结构设计好后用代码生成器生成的,手写太累:

Code
  1//------------------------------------------------------------
  2// All Rights Reserved , Copyright (C) 2009 , Jirisoft , Ltd. 
  3//------------------------------------------------------------
  4
  5using System;
  6
  7namespace DotNet.Common.Model
  8{
  9    /**//// <summary>
 10    /// BaseUserTable
 11    /// 用户表结构定义
 12    /// 
 13    /// 修改纪录
 14    /// 
 15    ///     2009.09.11 版本:4.5 JiRiGaLa 增加 AuditStatus。
 16    ///     2008.10.02 版本:4.4 JiRiGaLa 增加 Duty、Title。
 17    ///     2008.09.28 版本:4.3 JiRiGaLa 多余字段去掉。
 18    ///     2008.09.27 版本:4.2 JiRiGaLa CanVisit 增强,后来又去掉了。
 19    ///     2008.02.26 版本:4.1 JiRiGaLa 要求查询账户的在线状态,及该登录账户的电脑IP,MAC信息。
 20    ///     2007.01.05 版本:4.0 JiRiGaLa 重新整理代码。
 21    ///     2006.12.15 版本:3.0 JiRiGaLa 重新整理代码。
 22    ///     2006.11.23 版本:2.0 JiRiGaLa 结构优化整理。
 23    ///        2006.02.05 版本:1.1 JiRiGaLa 重新调整代码的规范化。
 24    ///        2006.02.02 版本:1.0 JiRiGaLa 书写格式进行整理。
 25    ///        2005.01.23 版本:1.0 JiRiGaLa 代码整理。
 26    /// 
 27    /// 版本:4.4
 28    ///
 29    /// <author>
 30    ///        <name>JiRiGaLa</name>
 31    ///        <date>2008.10.02</date>
 32    /// </author> 
 33    /// </summary>
 34    [Serializable]
 35    public class BaseUserTable
 36    {
 37        /**//// <summary>
 38        /// 表名
 39        /// </summary>
 40        public static String TableName = "Base_User";
 41
 42        /**//// <summary>
 43        /// 代码
 44        /// </summary>
 45        public static String FieldID = "ID";
 46
 47        /**//// <summary>
 48        /// 编号
 49        /// </summary>
 50        public static String FieldCode = "Code";
 51
 52        /**//// <summary>
 53        /// 用户名
 54        /// </summary>
 55        public static String FieldUsername = "Username";
 56
 57        /**//// <summary>
 58        /// 姓名
 59        /// </summary>
 60        public static String FieldRealname = "Realname";
 61
 62        /**////<summary>
 63        /// 性别
 64        ///</summary>
 65        public static String FieldSex = "Sex";
 66
 67        /**////<summary>
 68        /// 出生日期
 69        ///</summary>
 70        public static String FieldBirthday = "Birthday";
 71
 72        /**////<summary>
 73        /// 手机
 74        ///</summary>
 75        public static String FieldMobile = "Mobile";
 76
 77        /**////<summary>
 78        /// QQ号码
 79        ///</summary>
 80        public static String FieldOICQ = "OICQ";
 81
 82        /**////<summary>
 83        /// 家庭住址
 84        ///</summary>
 85        public static String FieldHomeAddress = "HomeAddress";
 86
 87        /**//// <summary>
 88        /// 默认角色
 89        /// </summary>
 90        public static String FieldRole = "Role";
 91
 92        /**//// <summary>
 93        /// 公司
 94        /// </summary>
 95        public static String FieldCompany = "Company";
 96
 97        /**//// <summary>
 98        /// 部门
 99        /// </summary>
100        public static String FieldDepartment = "Department";
101
102        /**//// <summary>
103        /// 工作组
104        /// </summary>
105        public static String FieldWorkgroup = "Workgroup";
106
107        /**//// <summary>
108        /// 岗位
109        /// </summary>
110        public static String FieldDuty = "Duty";
111
112        /**//// <summary>
113        /// 职称
114        /// </summary>
115        public static String FieldTitle = "Title";
116
117        /**//// <summary>
118        /// 用户密码
119        /// </summary>
120        public static String FieldUserPassword = "UserPassword";
121
122        /**//// <summary>
123        /// 电子邮件
124        /// </summary>
125        public static String FieldEmail = "Email";
126
127        /**//// <summary>
128        /// 系统语言选择
129        /// </summary>
130        public static String FieldLang = "Lang";
131
132        /**//// <summary>
133        /// 系统样式选择
134        /// </summary>
135        public static String FieldTheme = "Theme";
136
137        /**//// <summary>
138        /// 第一次访问时间
139        /// </summary>
140        public static String FieldFirstVisit = "FirstVisit";
141
142        /**//// <summary>
143        /// 上一次访问时间
144        /// </summary>
145        public static String FieldPreviousVisit = "PreviousVisit";
146
147        /**//// <summary>
148        /// 最后访问时间
149        /// </summary>
150        public static String FieldLastVisit = "LastVisit";
151
152        /**//// <summary>
153        /// 登录次数
154        /// </summary>
155        public static String FieldLoginCount = "LoginCount";
156
157        /**//// <summary>
158        /// 是否职员
159        /// </summary>
160        public static String FieldIsStaff = "IsStaff";
161
162        /**//// <summary>
163        /// 有效[是否锁定帐户同一个功能]
164        /// </summary>
165        public static String FieldEnabled = "Enabled";
166
167        /**//// <summary>
168        /// 当前记录的审核状态
169        /// </summary>
170        public static String FieldAuditStatus = "AuditStatus";
171
172        /**//// <summary>
173        /// 是否显示
174        /// </summary>
175        public static String FieldIsVisible = "IsVisible";
176
177        /**//// <summary>
178        /// 是否在线
179        /// </summary>
180        public static String FieldUserOnLine = "UserOnLine";
181
182        /**//// <summary>
183        /// IP地址
184        /// </summary>
185        public static String FieldIPAddress = "IPAddress";
186
187        /**//// <summary>
188        /// MAC地址
189        /// </summary>
190        public static String FieldMACAddress = "MACAddress";
191
192        /**//// <summary>
193        /// 当点登录标示
194        /// </summary>
195        public static String FieldSUID = "SUID";
196
197        /**////<summary>
198        /// 删除
199        ///</summary>
200        public static String FieldDeleteMark = "DeleteMark";
201
202        /**//// <summary>
203        /// 备注
204        /// </summary>
205        public static String FieldDescription = "Description";
206
207        /**//// <summary>
208        /// 密码提示问题代码
209        /// </summary>
210        public static String FieldQuestion = "Question";
211
212        /**//// <summary>
213        /// 密码提示答案 
214        /// </summary>
215        public static String FieldAnswerQuestion = "AnswerQuestion";
216
217        /**//// <summary>
218        /// 排序码
219        /// </summary>
220        public static String FieldSortCode = "SortCode";
221
222        /**//// <summary>
223        /// 创建者代码
224        /// </summary>
225        public static String FieldCreateUserID = "CreateUserID";
226
227        /**//// <summary>
228        /// 创建时间
229        /// </summary>
230        public static String FieldCreateDate = "CreateDate";
231
232        /**//// <summary>
233        /// 最后修改者代码
234        /// </summary>
235        public static String FieldModifyUserID = "ModifyUserID";
236
237        /**//// <summary>
238        /// 最后修改时间
239        /// </summary>
240        public static String FieldModifyDate = "ModifyDate";
241    }
242}

由于我们设计水平有限,表结构会经常修改来修改去,这样都定义了,修改表字段名,我的程序就在编译阶段知道都影响了哪里了,我就不太担心表结构变来变去了,当然是在适当的范围内,总比经不起折腾好点吧。

还有就是,程序不变,表结构有变化,需要集成到现有的系统表结构上,那可以考虑采用视图方式或表结构映射方式例如

Code
 1<?xml version="1.0" encoding="utf-8" ?>
 2<sqlMap>
 3    <resultMaps>
 4        <resultMap id="BasePermissionEntityResult" class="BasePermissionEntity">
 5            <result property="ID"                column="ID" />
 6            <result property="ParentID"            column="ParentID" />
 7            <result property="Code"                column="Code" />
 8            <result property="FullName"            column="FullName" />
 9            <result property="SortCode"            column="SortCode" />
10            <result property="IsScope"            column="IsScope" />
11            <result property="Enabled"            column="Enabled" />
12            <result property="AllowEdit"        column="AllowEdit" />
13            <result property="AllowDelete"        column="AllowDelete" />
14            <result property="Description"        column="Description" />
15            <result property="CreateUserID"    column="CreateUserID" />
16            <result property="CreateDate"        column="CreateDate" />
17            <result property="ModifyUserID"    column="ModifyUserID" />
18            <result property="ModifyDate"        column="ModifyDate" />
19        </resultMap>
20    </resultMaps>
21</sqlMap>

很多人有一个坏习惯,软件用都不用就说不好用,所以我把用户什么时候第一次用的,最后一次什么时候用的,登录了几次我都记录下来,可以跟别人对账,一次都没用过,你怎么知道我的软件不好用?就用了几次,你就知道了?神仙啊?

我都说了,最好的程序是经得起折腾,你有水平就说我哪个字段应该修改为什么名字,如何修改,为什么不对,我的程序好处就是经得起折腾,经得起修改。

我最讨厌你参考RBAC吧,RBAC里有个鬼啊,啥也没有的空洞理念啊,你让我参考啥?你有水平就直接说,我应该哪个字段修改什么名字,为是什么?或者你干脆告诉我,找个资深老美设计师来改一下就不就可以了。

为什么我们会为公司的信息应用系统分散而零乱而发愁?就是因为我们连达成统一的用户表的这么第一步都很难,看下面的回复,这个表统一难道真的很不重要吗?那什么才重要?研发操作系统才重要吗?

转载于:https://my.oschina.net/iwenr/blog/227694

写给刚入门的兄弟们,我常用的几个字段命名参考,大家都这么命名,我们写程序就更规范了...相关推荐

  1. 写给刚入门的前端工程师的前后端交互指南

    转自原文 写给刚入门的前端工程师的前后端交互指南 作为刚接触前端的不久的童鞋,大家都会兴奋于CSS和JS所带来漂亮界面,然而,前端工程师除了UI重构外,还有非常重要的职责在正确的区域渲染出服务端的数据 ...

  2. python 控制qq_最必要的最小建议集:写给刚入门编程(python)的同学

    写给谁 刚准备入手学习python编程的大学生或者研究生. 你为什么学python 当你做实验(生物信息学,地理信息学,计量经济学,心理学,运筹学,图像处理,语音处理,信号处理,嵌入式,linux等) ...

  3. python编程需要多大内存卡_最必要的最小建议集:写给刚入门编程(python)的同学...

    写给谁 刚准备入手学习python编程的大学生或者研究生. 你为什么学python当你做实验(生物信息学,地理信息学,计量经济学,心理学,运筹学,图像处理,语音处理,信号处理,嵌入式,linux等)的 ...

  4. 用Python和Pygame写游戏-从入门到精通(1)

    From: http://eyehere.net/2011/python-pygame-novice-professional-1/ 博客刚开,打算做一个Pygame的系列,翻译自Will McGug ...

  5. 陈松松:刚入门的视频营销新人,需要做哪些准备?

    这是我写的第81篇原创视频营销文章 陈松松,6年视频营销实战经验 越来越多的人都看好视频营销, 但很多刚入门的朋友不清楚做视频营销需要做哪些准备? 今天就专门分享这个话题, 如果你是刚刚入门或者打算操 ...

  6. MNIST手写字体识别入门编译过程遇到的问题及解决

    MNIST手写字体识别入门编译过程遇到的问题及解决 以MNIST手写字体识别作为神经网络及各种网络模型的作为练手,将遇到的问题在这里记录与交流. 激活tensorflow环境后,运行spyder或者j ...

  7. XML是什么,它可以做什么?——写给XML入门者 (转自Sank Orange)

    XML是什么,它可以做什么?--写给XML入门者 http://blog.csdn.net/cds27/archive/2006/05/18/743409.aspx XML即可扩展标记语言(eXten ...

  8. 用Python和Pygame写游戏-从入门到精通

    博客刚开,打算做一个Pygame的系列,翻译自Will McGugan的<Beginning Game Development with Python and Pygame –From Novi ...

  9. python刚入门的童鞋,按照这样学一个月就能开始月赚3000+

    想靠Python兼职赚钱月入过万,这还得看你的技术水平如何,只有精湛的技术才能有更高的收入,但是精通不是随便说说就能实现的,其中要花费大量的时间和精力,对于学习水平较高的同学来说,从入门到精通5至6个 ...

最新文章

  1. iOS: NSTimer的循环引用(解决)
  2. 人民日报钟声:以和平合作守护世界安全
  3. 《Fabric 云存储的电子健康病历系统》(3)病历结构体API
  4. 泰国基础教育管理实行新体制
  5. Qt修炼手册9_Ui名字空间及setupUi()原理解读
  6. Python【01】【基础部分】- A
  7. CSS3新增的伪类选择器
  8. ECCV 2020 论文大盘点-实例分割篇
  9. 【Python3网络爬虫开发实战】1.5.3-redis-py的安装
  10. 【python】Tkinter可视化窗口(三)
  11. 第五章 线性回归 学习笔记中
  12. 阿里云 DNS 运维服务的演进和实践
  13. 每天进步一点点013
  14. 【开发工具集】显示设备驱动程序列表——DriverView
  15. 大漠为什么不支持win10_Win10系统注册使用大漠插件的方法与设置!常见错误0x8002801...
  16. 物理机能够ping通虚拟机,但是虚拟机无法ping通物理机
  17. app个人隐私合规检测内容
  18. 【114天】尚学堂高琪JAVA300篇视频精华笔记(1-6)
  19. seaborn直方图、散点图与回归分析图的绘制
  20. SEO优化之og:标签

热门文章

  1. 判断ImageView的图片是否为默认
  2. 全国计算机王牌专业的一本大学,最值得报考的22所“普通一本”大学,王牌专业比985大学还牛!...
  3. 医院收费管理系统c++
  4. 26个英文字母是谁发明的?
  5. 在超图中导入3D max模型
  6. 简易微信小程序开发——推箱子
  7. css使用calc精确设置对象尺寸或位置
  8. 引流软件都能做什么?
  9. Maven仓库配置163源
  10. Scrapy抓取有关房屋租售信息并生成手机App(二)