偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

我們?cè)撊绾卧O(shè)計(jì)數(shù)據(jù)庫(kù)(二)

數(shù)據(jù)庫(kù) 數(shù)據(jù)庫(kù)運(yùn)維
本篇文章旨在討論如何抽象(以用戶作為抽象的例子),并提出一些解耦的思路。詳細(xì)請(qǐng)見下文

最近公司要開發(fā)新系統(tǒng),基本決定使用ORM(高層還在猶豫,擔(dān)心效率問(wèn)題)。既然使用了ORM,那么自然而然的就想到了用面向?qū)ο蟮乃枷雭?lái)設(shè)計(jì)數(shù)據(jù)庫(kù)。

本篇文章旨在討論如何抽象(以用戶作為抽象的例子),并提出一些解耦的思路。

我也是***次在實(shí)際項(xiàng)目中使用面向?qū)ο蟮乃枷雭?lái)設(shè)計(jì)數(shù)據(jù)庫(kù),寫下這篇博客,也是希望與大家多多交流。

正文開始

首先來(lái)需求分析

我們的系統(tǒng)有前臺(tái)和后臺(tái),前臺(tái)用戶有:Man,Woman,SuperMan,SpiderMan與IronMan。后臺(tái)用戶為Administrator。

前臺(tái)用戶都要填寫聯(lián)系方式與地址,然后SuperMan,SpiderMan與IronMan都有Ability。

需求很簡(jiǎn)單。那么按照這個(gè)需求,我們來(lái)隨手畫一個(gè)繼承關(guān)系圖。其中V代表抽象類(應(yīng)該是abstract,畫圖的時(shí)候腦抽想著是virtual就用V開頭了,懶得改圖了大家湊合著看吧),I代表Interface。如下圖:

從圖中可以看出,由抽象類Person派生出Administration與抽象類User。類Man與類Womam實(shí)現(xiàn)了接口Address與接口Contact,Inhumans則實(shí)現(xiàn)了Ability接口。

然后抽象類代碼:

  1. View Code   
  2.  
  3.     public abstract class Person  
  4.     {  
  5.         public string Username { get; set; }  
  6.         public string Password { get; set; }  
  7.     }  
  8.  
  9.     public abstract class User : Person  
  10.     {  
  11.         public string Name { get; set; }  
  12.     } 

接口代碼:

  1. View Code   
  2.  
  3.     public interface IAddress  
  4.     {  
  5.         string Address { get; set; }  
  6.     }  
  7.  
  8.     public interface IContact  
  9.     {  
  10.          string Email{get;set;}  
  11.          string WorkPhone { get; set; }  
  12.          string MobilePhone { get; set; }  
  13.          string Fax { get; set; }  
  14.     } 

***是Man類和Woman類:

  1. View Code   
  2.  
  3.     public class Man : User, IContact, IAddress  
  4.     {  
  5.         public string Address { get; set; }  
  6.         public string Email { get; set; }  
  7.         public string WorkPhone { get; set; }  
  8.         public string MobilePhone { get; set; }  
  9.         public string Fax { get; set; }  
  10.  
  11.         public bool HasCar { get; set; }       //如果這三項(xiàng)都為false的話  
  12.         public bool HasHouse { get; set; }     //這輩子就甭想結(jié)婚了  
  13.         public bool HasMoney { get; set; }     //T T我淚涌  
  14.     } 
  1. View Code   
  2.  
  3.     class Woman : User, IAddress, IContact  
  4.     {  
  5.         public string Address { get; set; }  
  6.         public string Email { get; set; }  
  7.         public string WorkPhone { get; set; }  
  8.         public string MobilePhone { get; set; }  
  9.         public string Fax { get; set; }  
  10.  
  11.         public bool IsBeauty { get; set; }  //這個(gè)為true,一輩子不愁吃喝  
  12.     } 

代碼非常簡(jiǎn)單。其他幾個(gè)類限于篇幅就不說(shuō)那么細(xì)了。

那么按照這個(gè)model,使用EF Model First來(lái)建立數(shù)據(jù)庫(kù),得到的Woman表如下:

那么接下來(lái)就是重點(diǎn)了:為什么不把Contact和Address分表儲(chǔ)存。這樣與Man表、Woman表寫在一起的話,出現(xiàn)改動(dòng)(如新增一種聯(lián)系方式),會(huì)不會(huì)非常痛苦。

如果不是使用ORM,那么這個(gè)改動(dòng)的確是很痛苦;但是如果使用了(這里默認(rèn)使用的ORM可以從Model生成/改動(dòng)數(shù)據(jù)庫(kù)),那么這個(gè)改動(dòng)是沒什么大不了的了,只需要修改一下接口定義,然后根據(jù)報(bào)錯(cuò)去改就好了。至于數(shù)據(jù)庫(kù)的變動(dòng),就交給ORM去做就OK了。

這樣有一個(gè)好處,可以在有限的范圍內(nèi)實(shí)現(xiàn)解耦,部分減少了關(guān)系——若將Contact和Address分表的話,取Woman要Join兩次,這看起來(lái)沒什么大不了的,但是如果放大了看,如果是join十次呢?這樣弄出來(lái)的東西很難去維護(hù)(現(xiàn)在公司老系統(tǒng)就是這樣,動(dòng)不動(dòng)就join十次二十次的,改動(dòng)起來(lái)十分費(fèi)力)。

具體怎么去解耦,這個(gè)問(wèn)題相當(dāng)相當(dāng)?shù)纳願(yuàn)W,就不敢在這班門弄斧了。

原文鏈接:http://www.cnblogs.com/CrazyJinn/archive/2012/08/20/2637459.html

責(zé)任編輯:林師授 來(lái)源: 博客園
相關(guān)推薦

2013-03-20 13:25:53

數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)設(shè)計(jì)

2013-03-20 13:35:12

數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)設(shè)計(jì)

2013-03-20 11:33:31

2012-04-28 10:07:43

數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)設(shè)計(jì)

2013-03-20 13:16:15

2011-05-19 11:01:14

ERWin數(shù)據(jù)庫(kù)設(shè)計(jì)

2023-10-16 09:00:00

數(shù)據(jù)庫(kù)分布式系統(tǒng)

2017-07-06 15:52:22

大數(shù)據(jù)數(shù)據(jù)分層數(shù)據(jù)倉(cāng)庫(kù)

2022-06-30 18:17:00

數(shù)據(jù)集云數(shù)據(jù)建模計(jì)數(shù)據(jù)倉(cāng)庫(kù)

2021-10-03 15:00:44

數(shù)據(jù)庫(kù)mysql單機(jī)

2020-12-31 05:29:25

數(shù)據(jù)庫(kù)Powerdesign建模

2011-04-12 10:59:46

Oracle數(shù)據(jù)庫(kù)

2017-11-23 15:06:14

前端數(shù)據(jù)庫(kù)開發(fā)

2018-07-27 06:08:12

2017-11-27 06:01:37

數(shù)據(jù)庫(kù)中間件中間層

2017-11-30 08:56:14

數(shù)據(jù)庫(kù)中間件架構(gòu)師

2015-06-23 13:56:30

數(shù)據(jù)庫(kù)設(shè)計(jì)面向?qū)ο?/a>

2011-08-23 17:45:54

MySQL丟失root密碼

2021-04-14 09:00:00

MySQL數(shù)據(jù)庫(kù)MongoDB

2011-03-01 14:04:30

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)