躺在沙滩上的小猪

快乐的每一天

#

Domain Object 思考(二)

我们可以让Domain Object更rich:)

 1package com.martin.pdo;
 2
 3import java.io.Serializable;
 4import java.util.List;
 5
 6/**
 7 * @author martin.xus
 8 * @hibernate.class table="t_user"
 9 * @spring.bean name="user"
10 * @spring.property name="manager" ref="userManager"
11 */

12public class User implements Serializable {
13
14    /**
15     * @hibernate.id generator-class="uuid.hex"
16     * length="32"
17     * column="user_id"
18     */

19    private String id;
20
21    /**
22     * @hibernate.property column="user_name"
23     * length="80"
24     */

25    private String name;
26
27    /**
28     * @hibernate.property
29     */

30    private char sex;
31
32    /**
33     * @hibernate.property
34     */

35    private int age;
36
37    //省略了getter & setter
38    private UserManager manager = null;
39
40    /**
41     * @return Returns the manager.
42     */

43    public UserManager getManager() {
44        return manager;
45    }

46
47    /**
48     * @param manager The manager to set.
49     */

50    public void setManager(UserManager manager) {
51        this.manager = manager;
52    }

53
54    /**
55     * @param user
56     */

57    public void add(User user) {
58        this.getManager().add(user);
59    }

60
61    public List loadByName(String name) {
62        return this.getManager().loadByName(name);
63    }

64
65    public void remove(User user) {
66        this.getManager().remove(user);
67    }

68}

69


测试代码,我们可以这样来写

 1ApplicationContext context = JUnitTestHelper.getContext();
 2        User user = (User) context.getBean("user");
 3
 4        User _u1 = new User();
 5        _u1.setName("martin xus");
 6        _u1.setSex('F');
 7        _u1.setAge(100);
 8
 9        user.add(_u1);
10
11        Assert.assertEquals(((User) user.loadByName("martin xus").get(0)).getId(), _u1.getId());
12

posted @ 2005-09-22 14:46 martin xus| 编辑 收藏

Domain Object 的思考(一)

     摘要: 我们建一个简单的表如下: +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | varcha...  阅读全文

posted @ 2005-09-22 13:31 martin xus| 编辑 收藏

[讨论] Persistent Domain Objects Pattern

http://www.theserverside.com/patterns/thread.tss?thread_id=33387

posted @ 2005-09-22 10:05 martin xus| 编辑 收藏

对象的存储&读取

python中提供一个pickle 标准类 来 存储/读取 任意的对象。
如下:

import pickle as p

class PickleTest:

    def __init__(self,o,filename):
        if not 0:
            self.obj=o
            self.filename=filename

    def dump(self):
        print 'save data ',self.obj,' >> ',self.filename
        f = file(filename,'w')
        p.dump(self.obj,f)

    def load(self):
        f = file(self.filename)
        s = p.load(f)
        print 'load data from ',self.filename,' >>',s
        return s
if __name__=='__main__':
    filename = 'test.data'
    obj = {'p1':[0,1,2,3],'p2':(1,2,3),'p3':{'1':1,'2':2},'p4':'str'}
    test = PickleTest(obj,filename)
    test.dump()
    test.load()

同时也提供另外一个类cPickle,是c写的,速度当然会快很多。
只需将如下

import pickle as p

换成

import cPickle as p

即可

posted @ 2005-09-21 16:26 martin xus| 编辑 收藏

python and Template.

也许说法不正确,但是目前我能理解的就是替换,替换指定文本中的内容。
例如:

<a name="$code$"></a>
<div class="infomark">$title$</div>
<div class="info" style="background:#F4F4F4">
<pre>
    $content$
</pre>   
</div>
<div align="right" class="right"><a href="#000">Top</a></div>
<br>
<br>

我要做的只是替换其中特定格式的 $code$,$title$,$conent$,而已。

那么我们用re可以轻松搞定(当然更复杂的template需要更深入的去学习...)。
--------------

import re 
import sys 

class Template: 
    """ 
        简单的模板,用于替换指定文本的特殊字符 
   例如:$code$ 
    """ 
    def __init__(self,filename,params,prefix='$',suffix='$'): 
        if not filename: 
            print 'Error:' 
            sys.exit(-1) 
        else: 
            self.filename=filename            
        self.text=''    
        self.params=params 
        self.prefix=prefix 
        self.suffix=suffix 

    def getKeys(self): 
        """ 
            返回所有的要求替换匹配的表达式 
        """ 
        return params.keys() 

    def parse(self): 
        
        self.getContent() 
          
        keys = self.params.keys() 
        for key in keys: 
            value = self.params[key] 
            self.__replace(key,value) 
        return self.text 

    
    def getContent(self): 
        """ 
            读取文件的内容 
        """ 
        f = open(self.filename) 
        lines = f.readlines() 
        self.text = ''.join(line for line in lines) 
        
    def __replace(self,key,value):        
        #m = re.match(prefix+key+suffix,text) 
        pattern = '\.*\\'+self.prefix+key+'\\'+self.suffix+'\.*' 
        self.text = re.sub(pattern,value,self.text) 

if __name__=='__main__': 
    filename = 'D:\\workspace\\style\\test\\template.xt' 
    params = {'code':'001001','title':'测试','content':'的嘎公司今后;飞机库'} 
    t = Template(filename,params) 
    print t.parse()

------------- ------------- ------------- ------------- ------------- ------------- ------------- -------------

这样,我们的python代码可以更简单点了

我们将以前的代码做修改,如下:

import cx_Oracle 
from Template import * 

def parse(): 
    '''generate the content html''' 

    sql = '''select t.bz_code code, t.bz_title title, t.bz_content content 
        from bz_czzs t 
        order by t.bz_code''' 

    connection = cx_Oracle.connect( 'etasadmin/etasadmin@zhongju' ) 
    cursor = connection.cursor() 
    cursor.execute(sql) 
    item=cursor.fetchone() 
    i=1; 
    print 'begin' 
    while item: 
        i+=1 
        print 'parsing ',i,' item....' 
        writeContent(item[0],item[1],str(item[2])) 
        item=cursor.fetchone() 

def writeContent(code,title,content): 
    filedir='D:\\m\\content\\' 
    
    params = {'code':code,'title':title,'content':content} 
    t = Template('D:\\workspace\\style\\test\\template.xt',params) 
    s = t.parse() 

    out = open(filedir+code+".html",'w') 
    out.write(s) 
    out.flush() 
    out.close() 
    
if __name__=='__main__': 
    print 'parse..................'    
    parse() 
    print 'end'

参考文档:
http://docs.python.org/lib/module-re.html

关于template的进一步思考:
一:不用那么复杂的制定文件全名:
'D:\\workspace\\style\\test
template.xt'
代码实现从当前的classpath中自动寻找该文件,并且制定文件后缀名。
那么就变的如下简单了。

t = Template('template',params)

posted @ 2005-09-20 18:53 martin xus| 编辑 收藏

仅列出标题
共28页: First 上一页 20 21 22 23 24 25 26 27 28 下一页