数据库调整也可以遵循“开闭原则”的,本文我们就通过一个具体的实例来介绍这部分内容,首先如如果在原表上改,牵动太大,所以就想到了面向对象的“开闭原则”,在不改变原表的同时,添加一个附加表,即和原表有相同的主键,并且是一对一的关系(有时,如果一张表太复杂,字段太多,我们也可以用这个方法把复杂表进行拆分),添加后的结构如下:
class='fit-image' onload='javascript:if(this.width>498)this.width=498;' onmousewheel = 'javascript:return big(this)' border="0" alt="数据库调整所遵循的“开闭原则”简介" src="http://images.51cto.com/files/uploadimg/20110901/1236530.png" />
这样在不改原表的基础上,就完成的需求的变更。
我的需求改动还涉及到了跨域问题,用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 + ")");
 - }
 
以上就是数据库调整所遵循的“开闭原则”的相关知识的介绍,本文我们就介绍到这里了,希望本次的介绍能够对您有所收获!