数据库调整也可以遵循“开闭原则”

项目完成了,现在进入了维护阶段,一切都很平静。。。

突然有一天,老板来了个需求,要求用户有一个新的功能,即会员可以为好友推荐,进行本网站,当推荐的人真的来本网站注册后,并进行了邮件确认后,同时要给那个会员一些好处,比如,送它积分。

这个需要无疑要牵动用户表,这可如何是好,是在原表基础上改,还是。。。

首先如如果在原表上改,牵动太大,所以就想到了面向对象的“开闭原则”,在不改变原表的同时,添加一个附加表,即和原表有相同的主键,并且是一对一的关系(有时,如果一张表太复杂,字段太多,我们也可以用这个方法把复杂表进行拆分),添加后的结构如下

这样在不改原表的基础上,就完成的需求的变更。

我的需求改动还涉及到了跨域问题,用jsonp解决的,实例代码如下:

 <script>
        $(function() {
            $("#btn").click(function() {
                $.ajax({
                    type: "GET",
                    dataType: "jsonp",
                    jsonp: "jsonpcallback",
                    data: {  userid: '<%=Standard.ClientHelper.Current.UserInfo.ID %>', 
                                 username: '<%=Standard.ClientHelper.Current.UserInfo.UserName %>',
                                 _email: $("#email").val() },
                    url: "http://sso.c2cedu.com/Register/SendEmailInsertInvite",
                    success: function(data) {
                        //填写用户激活后送C币的逻辑
                        if (data.success == true)
                            alert("邀请成功");
                        else
                            alert("邀请失败");
                    }
                });
            });
        });
    </script>

另外一网站的CS端程序如下:

   public ContentResult SendEmailInsertInvite(string userid, string username, string _email)
        {
            string queryStr = Request.QueryString["jsonpcallback"];
            string res = "{success:false}";
 
            try
            {
                res = "{success:true}";
                #region 发邀请邮件,并将checkcode记录和邀请表记录插入
                Array.ForEach(_email.Split(','), i =>
                {
                    CheckCodeRecord checkCodeRecord = new CheckCodeRecord
                   //有几个email地址,就产生几个checkcode记录
                    {
                        CheckCode = VCommons.Utils.GetNewGuid(),
                        Description = "邀请送C币"
                    };
                    UserInviteCCoin entity = _UserBaseServices.GetUserInviteCCoinByUserId(userid)
                    ?? new UserInviteCCoin
                    {
                        UserID = userid,
                        InviteID = VCommons.Utils.GetNewGuid(),
                    };
                    entity.IPAddr = checkCodeRecord.CheckCode;
                    _UserBaseServices.AddInviteRecord(entity, checkCodeRecord);
                    email.UserInviteEmail(entity, username, i);
                });
                #endregion
            }
            catch (Exception)
            {
                throw;
            }
 
            return Content(queryStr + "(" + res + ")");
        }
时间: 2024-10-23 23:49:43

数据库调整也可以遵循“开闭原则”的相关文章

《Android 源码设计模式解析与实战》——第1章,第1.2节让程序更稳定、更灵活——开闭原则

1.2 让程序更稳定.更灵活--开闭原则 开闭原则的英文全称是Open Close Principle,缩写是OCP,它是Java世界里最基础的设计原则,它指导我们如何建立一个稳定的.灵活的系统.开闭原则的定义是:软件中的对象(类.模块.函数等)应该对于扩展是开放的,但是,对于修改是封闭的.在软件的生命周期内,因为变化.升级和维护等原因需要对软件原有代码进行修改时,可能会将错误引入原本已经经过测试的旧代码中,破坏原有系统.因此,当软件需要变化时,我们应该尽量通过扩展的方式来实现变化,而不是通过修

设计模式六大原则(6):开闭原则

定义:一个软件实体如类.模块和函数应该对扩展开放,对修改关闭. 问题由来:在软件的生命周期内,因为变化.升级和维护等原因需要对软件原有代码进行修改时,可能会给旧代码中引入错误,也可能会使我们不得不对整个功能进行重构,并且需要原有代码经过重新测试. 解决方案:当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化.          开闭原则是面向对象设计中最基础的设计原则,它指导我们如何建立稳定灵活的系统.开闭原则可能是设计模式六项原则中定义最模糊的一个了,它

设计模式之禅之六大设计原则-开闭原则

开闭原则 一:开闭原则的定义        --->一个软件实体如类.模块和函数应该对扩展开放,对修改关闭.        --->我们做一件事情,或者选择一个方向,一般需要经历三个步骤:What--是什么,Why--为什么,How--怎么做(简称3W原则,How取最后一个w)        --->对于开闭原则,我们也采用这三步来分析,即什么是开闭原则,为什么要使用开闭原则,怎么使用开闭原则? 二:如何使用开闭原则        --->抽象约束.               

解析Java编程中设计模式的开闭原则的运用_java

开闭原则(Open Closed Principle)是Java世界里最基础的设计原则,它指导我们如何建立一个稳定的.灵活的系统. 定义: 一个软件实体如类.模块和函数应该对扩展开放,对修改关闭. Softeware entities like classes,modules and functions should be open for extension but closed for modifications. 开闭原则的含义是说一个软件实体应该通过扩展来实现变化,而不是通过修改已有代码

工厂方法真的支持OCP 开闭原则吗?

问题描述 工厂方法真的支持OCP 开闭原则吗? 开闭原则:我们在设计一个模块的时候应当使这个模块可以在不被修改的前提下被扩展换句话说就是应当可以在不必修改源代码的情况下改变这个模块的行为.工厂方法增加新的方法类的时候,不是要修改接口.然后再修改所有的相关类么.这岂不是违背了开闭原则 解决方案 工厂什么的都只是假象,利用反射可以

设计模式学习:开闭原则

上面讲完序,就开始讲开闭原则,有点不太优雅,不过,正如我说的,在学之前,周围的人和老师,网络上的人都觉得这个不错,你不太清楚,那么就学学吧,学完之后,再仔细去整合,思考,去除杂质,保留精华.在学的过程中总是不断自己停下来仔细思考的方式,我并不推荐学技术的人干(当然立志科研的人一定要有这种钻研精神),因为太耗时间.而且有时候你会发现,你疑问的就是后面提到的.唠叨完毕,开始讲讲开闭原则. 1988年,勃兰特·梅耶(Bertrand Meyer)在他的著作<面向对象软件构造(Object Orient

深入理解JavaScript系列(7) S.O.L.I.D五大原则之开闭原则OCP_javascript技巧

前言 本章我们要讲解的是S.O.L.I.D五大原则JavaScript语言实现的第2篇,开闭原则OCP(The Open/Closed Principle ). 开闭原则的描述是: Software entities (classes, modules, functions, etc.) should be open for extension but closed for modification. 软件实体(类,模块,方法等等)应当对扩展开放,对修改关闭,即软件实体应当在不修改的前提下扩展.

软件设计原则----开-闭原则(OCP)

设计一个模块时,应当使该模块在不被修改的前提下被扩展,即可在不必修改源代码的情况下改变该模块的行为. 陈述: 软件实体(类.模块.函数等)应该是可以扩展的,同时还可以是不必修改的,更确切的说,函数实体应该:(1)对扩展是开放的当应用的需求变化时,我们可以对模块进行扩展,使其具有满足改变的新的行为.即:我们可以改变模块的功能(2)对更改是封闭的对模块进行扩展时,不必改动模块已有的源代码或二进制代码. 分析: 世界是变化的(而且变化很快),软件是对现实的抽象.---->软件必须能够扩展. 如果任何修

杨明生:保险资金运用必须遵循稳健安全性原则

--访中国保险监督管理委员会副主席杨明生 ■本刊记者 张晓莹 记者:非常感谢您接受<中国金融>杂志的采访.保监会在2010年8月发布的<保险资金运用管理暂行办法>以及9月初发布的<保险资金投资不动产暂行办法>和<保险资金投资股权暂行办法>是构建保险资金运用政策法规体系的重要组成部分.结合我国保险资金运用改革发展的现状,请您谈谈三个办法起草和发布的背景. 杨明生:近两年来,国际.国内经济金融运行出现了一些新情况.新问题和新趋势,保监会综合考虑外部环境变化和行业