数据库调整也可以遵循“开闭原则”的,本文我们就通过一个具体的实例来介绍这部分内容,首先如如果在原表上改,牵动太大,所以就想到了面向对象的“开闭原则”,在不改变原表的同时,添加一个附加表,即和原表有相同的主键,并且是一对一的关系(有时,如果一张表太复杂,字段太多,我们也可以用这个方法把复杂表进行拆分),添加后的结构如下:
这样在不改原表的基础上,就完成的需求的变更。
我的需求改动还涉及到了跨域问题,用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 + ")");
- }
以上就是数据库调整所遵循的“开闭原则”的相关知识的介绍,本文我们就介绍到这里了,希望本次的介绍能够对您有所收获!
【编辑推荐】