<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    春風博客

    春天里,百花香...

    導航

    <2007年12月>
    2526272829301
    2345678
    9101112131415
    16171819202122
    23242526272829
    303112345

    統計

    公告

    MAIL: junglesong@gmail.com
    MSN: junglesong_5@hotmail.com

    Locations of visitors to this page

    常用鏈接

    留言簿(11)

    隨筆分類(224)

    隨筆檔案(126)

    個人軟件下載

    我的其它博客

    我的鄰居們

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    使用泛型類簡化服務層(Service)類的設計

    領域層類可以理解為程序運行時數據流的功能單位,而服務層類是為領域層類提供服務的,常見的服務有增刪改查等操作,在沒有泛型之前,我們只能采用一個服務類為一個領域類提供服務的方案,如果說服務的性質類似,如都是增刪改查等,則代碼的功能重復性很高,維護起來也很麻煩.如果采用了泛型類,我們就可以把性質相似的服務類歸納成一個,很大程度上能簡化編碼.

    下面請看例子,我們有兩個領域對象類:
    Member類:
    package com.sitinspring.domain;

    import org.dom4j.Element;

    /**
     * 成員類
     * 
    @author sitinspring
     *
     * @date 2007-12-28
     
    */

    public class Member implements CanbeXmlElementable{
        
    // 成員名稱
        private String name;
        
        
    // 年齡    
        private int age;
        
        
    /**
         * 構造函數
         * 
    @param name
         * 
    @param age
         
    */

        
    public Member(String name,int age){
            
    this.name=name;
            
    this.age=age;
        }

        
        
    /**
         * 將Member實例轉化為XML中一個節點
         
    */

        
    public Element generateElement(Element parent){
            Element elm
    =parent.addElement("member");
            
            Element nameElm
    =elm.addElement("name");    
            nameElm.setText(name);
            Element ageElm
    =elm.addElement("age");    
            ageElm.setText(String.valueOf(age));
            
            
    return elm;
        }

        
        
    public String toString(){
            
    return "Name="+name+" Age="+age;
        }


        
    public int getAge() {
            
    return age;
        }


        
    public void setAge(int age) {
            
    this.age = age;
        }


        
    public String getName() {
            
    return name;
        }


        
    public void setName(String name) {
            
    this.name = name;
        }

    }

    公司類:
    package com.sitinspring.domain;

    import org.dom4j.Element;

    /**
     * 公司類
     * 
    @author sitinspring
     *
     * @date 2007-12-28
     
    */

    public class Company implements CanbeXmlElementable{
        
    // 公司名
        private String name;
        
        
    // 地址
        private String address;
        
        
    /**
         * 構造函數
         * 
    @param name
         * 
    @param address
         
    */

        
    public Company(String name,String address){
            
    this.name=name;
            
    this.address=address;
        }

        
        
    /**
         * 將Company類的實例轉化為XML的一個節點
         
    */

        
    public Element generateElement(Element parent){
            Element elm
    =parent.addElement("company");
            
            Element nameElm
    =elm.addElement("name");    
            nameElm.setText(name);
            Element ageElm
    =elm.addElement("address");    
            ageElm.setText(address);
            
            
    return elm;
        }

        
        
    public String toString(){
            
    return "Company Name="+name+" Address="+address;
        }


        
    public String getName() {
            
    return name;
        }


        
    public void setName(String name) {
            
    this.name = name;
        }


        
    public String getAddress() {
            
    return address;
        }


        
    public void setAddress(String address) {
            
    this.address = address;
        }

    }

    它們都實現了一個名為CanbeXmlElementable的接口:
    package com.sitinspring.domain;

    import org.dom4j.Element;

    /**
     * 接口,強制子類實現generateElement函數
     * 
    @author sitinspring
     *
     * @date 2007-12-28
     
    */

    public interface CanbeXmlElementable{
        
    /**
         * 用于把領域對象實例轉化為XML中一個節點
         * 
    @param parent
         * 
    @return
         
    */

        
    public Element generateElement(Element parent);
    }

    為什么要實現這個接口呢,下面就知道了.

    對這兩個對象需要實現集中管理和將集合存儲到XML文件中,現在我們可以用泛型類實現這兩個功能,下面看泛型類實現的新服務類:
    package com.sitinspring.service;

    import java.io.FileWriter;
    import java.util.ArrayList;
    import java.util.List;

    import org.dom4j.Document;
    import org.dom4j.DocumentHelper;
    import org.dom4j.Element;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.io.XMLWriter;

    import com.sitinspring.domain.CanbeXmlElementable;

    /**
     * 服務類,持有對象的集合,負責對象的存儲
     * 
    @author sitinspring
     *
     * @date 2007-12-28
     
    */

    public class Service<extends CanbeXmlElementable>{
        
    private List<T> elements;
        
        
    /**
         * 添加集合元素
         * 
    @param element
         
    */

        
    public void add(T element){
            
    if(elements==null){
                elements
    =new ArrayList<T>();
            }

            
            elements.add(element);
        }

        
        
    /**
         * 將集合保存成XML文件
         * 
    @param xmlFile
         
    */

        
    public void saveToXml(String xmlFile){
            
    try{
                Document document
    =DocumentHelper.createDocument();
                Element root
    =document.addElement("elements");
                
                
    for(T t:elements){
                    t.generateElement(root);
                }
                
                
                OutputFormat format 
    = OutputFormat.createPrettyPrint();
                format.setEncoding(
    "GBK");    // 指定XML編碼        
                
                XMLWriter writer 
    = new XMLWriter(new FileWriter(xmlFile),format);
                writer.write(document);
                writer.close();    
            }

            
    catch(Exception ex){
                ex.printStackTrace();
            }

        }

    }

    對于兩個領域對象的集合管理和XML持久化,使用這一個類就可以了,下面是測試代碼:
    package com.sitinspring;

    import com.sitinspring.domain.Company;
    import com.sitinspring.domain.Member;
    import com.sitinspring.service.Service;

    /**
     * 測試類
     * 
     * 
    @author sitinspring
     * 
     * @date 2007-12-28
     
    */

    public class Main {
        
    public static void main(String[] args) {
            
    // 泛型類測試一
            Service<Member> memberService = new Service<Member>();

            memberService.add(
    new Member("Andy"25));
            memberService.add(
    new Member("Bill"35));
            memberService.add(
    new Member("Cindy"45));
            memberService.add(
    new Member("Sitinspring"55));

            memberService.saveToXml(
    "member.xml");

            
    // 泛型類測試二
            Service<Company> companyService = new Service<Company>();

            companyService.add(
    new Company("IBM","NewYork"));
            companyService.add(
    new Company("Microsoft""beijing"));
            companyService.add(
    new Company("Google""Shanghai"));
            companyService.add(
    new Company("Citigroup""Dalian"));

            companyService.saveToXml(
    "company.xml");
        }

    }

    文件結果:
    member.xml:
    <?xml version="1.0" encoding="GBK"?>

    <elements>
      
    <member>
        
    <name>Andy</name>
        
    <age>25</age>
      
    </member>
      
    <member>
        
    <name>Bill</name>
        
    <age>35</age>
      
    </member>
      
    <member>
        
    <name>Cindy</name>
        
    <age>45</age>
      
    </member>
      
    <member>
        
    <name>Sitinspring</name>
        
    <age>55</age>
      
    </member>
    </elements>

    company.xml:
    <?xml version="1.0" encoding="GBK"?>

    <elements>
      
    <company>
        
    <name>IBM</name>
        
    <address>NewYork</address>
      
    </company>
      
    <company>
        
    <name>Microsoft</name>
        
    <address>beijing</address>
      
    </company>
      
    <company>
        
    <name>Google</name>
        
    <address>Shanghai</address>
      
    </company>
      
    <company>
        
    <name>Citigroup</name>
        
    <address>Dalian</address>
      
    </company>
    </elements>


    現在可以看出,以前使用多個類才能實現的功能在泛型類誕生后只需要一個類就可以了,它能高度歸納類的共性,減少功能相似類的數目,減少重復代碼,減輕了項目的復雜度,真的是"很好,很強大!".

    代碼下載:
    http://www.tkk7.com/Files/sitinspring/GenericPersistence20071228164755.rar

    如果你對泛型類不是很熟悉可以參考:
    http://www.tkk7.com/sitinspring/archive/2007/12/28/171212.html

     

    posted on 2007-12-28 16:47 sitinspring 閱讀(3645) 評論(2)  編輯  收藏 所屬分類: Object Orient ProgrammingJava基礎

    評論

    # re: 使用泛型類簡化服務層(Service)類的設計 2007-12-28 17:59 zephyr

    你的這個Service感覺更像是DAO或是Repository.Service是包含領域邏輯的..難道所有的領域邏輯都一樣?  回復  更多評論   

    # re: 使用泛型類簡化服務層(Service)類的設計 2007-12-28 19:13 sitinspring

    @zephyr

    這個Service是舉個例子而已,集合和生成XML文件作為服務層的兩個功能的代表.
    有時候服務層還真是高度相似,雖然代碼有些許詫異,但功能都很雷同,泛型出來之前沒有什么好辦法.

      回復  更多評論   

    sitinspring(http://www.tkk7.com)原創,轉載請注明出處.
    主站蜘蛛池模板: 成年女人视频网站免费m| 久久精品国产免费观看三人同眠| 亚洲精品在线免费看| 亚洲AV第一页国产精品| 亚洲高清免费视频| 国产AV无码专区亚洲AV手机麻豆| 亚洲国产综合精品中文第一| 天天摸夜夜摸成人免费视频| 亚洲国产精品ⅴa在线观看| 在线观看av永久免费| 亚洲人成网站999久久久综合| 在线中文高清资源免费观看| 亚洲人成网站在线播放2019| 无码人妻久久一区二区三区免费丨| 亚洲黄色片免费看| 免费黄色网址网站| 亚洲依依成人亚洲社区| 国产网站免费观看| 在线看片免费人成视频久网下载 | 99视频精品全部免费观看| 久久亚洲精品无码VA大香大香| 国产高清免费视频| 丰满亚洲大尺度无码无码专线 | 亚洲人成网77777亚洲色| 亚洲一区免费观看| 亚洲综合一区无码精品| 俄罗斯极品美女毛片免费播放| 中文永久免费观看网站| 亚洲国产天堂在线观看| 国产人在线成免费视频| 亚洲av无码专区国产不乱码| 中文字幕精品亚洲无线码一区| 亚洲成人在线免费观看| 国产精品亚洲专区在线播放| 久久精品国产精品亚洲艾| 中文字幕无码成人免费视频| igao激情在线视频免费| 亚洲成aⅴ人片在线影院八| 免费国产a国产片高清网站| 久久久久久国产精品免费免费男同 | 久久不见久久见免费影院|