關於包(Package)應用規範的說明 (轉)

worldblog發表於2007-12-04
關於包(Package)應用規範的說明 (轉)[@more@]

一、 dataBase端開發介紹:
package分為兩個部分:1、package head,2、package body。前者為包頭的定義,後者為過程及方法的實體。只要包頭定義中描述足夠詳細,可以隱藏包體的細節。舉例如下:
package head pkg_to
is
--user define data type—
--自定義資料型別--

  --user define procedure and function—
  --使用者自定義過程和—
  --the procedure proc_pass_validate is the process ofpassword validate—
  --the param log_id is the pa_id coloum—
  --the param log_pass is the pb_yhpwd coloum—
  --the param member_name is the pb_name coloum—
  --if the member_name is return value “none”,it indicate that the—
  --login process has been crash—
  --proc_password_validate過程用於密碼的驗證—
  --引數log_id為pa_id欄位—
  --引數log_pass為pb_yhpwd欄位—
  --引數member_name為pb_name欄位—
  --如果member_name的返回值為”none”,則說明驗證過程出錯--
  procedure proc_password_validate(
  log_id in number,
  log_pass in varchar2,
  member_name out varchar2
  );

  --the procedure proc_password_change is the process ofpassword change—
  --the param log_id is the pa_id coloum—
  --the param org_pass is the user’s original password—
  --the param new_pass is the user’s new password—
  --the param status is the status of this process—
  --if the status is return value 0,it indicate that the—
  --change process has been validate—
--if the status is return value 1,it indicate that the—
  --user’s original password make misetake—
  --proc_password_change過程用於密碼的修改—
  --引數log_id為pa_id欄位—
  --引數org_pass為使用者原來的密碼—
  --引數new_pass為使用者新的密碼—
  --引數status為該過程的狀態返回值--
  --如果status的返回值為0,則說明修改過程成功—
  --如果status的返回值為1,則說明使用者的原始密碼有錯--
  procedure proc_password_change(
  log_id in number,
  org_pass in varchar2, 
  new_pass in varchar2,
  status out number
  );
 
  end;

因此,我們只需要提供一個規範的包頭資訊就可以滿足大家的開發需要,而包體的詳細過程則可以隱藏,當有新的需要時,只需包,然後給大家重發一個包頭的描述就可以了,在開發階段中,可以先採用procedure,然後統一將所有的procedure打包,在app端的修改很小,只需要更新三行程式碼。
二、 appServer端開發解釋:
1、 jc描述:
package pepper_dog999.Use;

import ..*;

public class JdbcCallPackage {

  public static void main(String[] args) {
  Connection conn;
  String =".jdbc.driver.OracleDriver";
  String to:url="jdbc:oracle:thin:@192.168.128.41:1521:ORC2"'>url="jdbc:oracle:thin:@192.168.128.41:1521:ORC2";
  try{
  conn=JdbcConnDb.connDb(driver,url,"pepper_dog999","bad_boy2");
  CallableStatement cstmt=conn.prepareCall("{call  pkg_topnet.proc_password_validate(?,?,?)}");
  cstmt.setInt(1,10001);
  cstmt.setString(2,"pass1");
  cstmt.registerOutParameter(3,Types.VARCHAR);
  cstmt.executeQuery();
  String pbName=cstmt.getString(3);
  System.out.println("the output param is pbName,and its value is:"+pbName);
  }catch(SQLException ex){
  System.out.println("SQL Exception:"+ex.getMessage());
  }
  }
}

class JdbcConnDb {

  public static Connection connDb(String driver,String url,String user,String pass){
  Connection conn=null;
  try{
  Class.forName(driver);
  }catch(java.lang.ClassNotFoundException e){
  System.out.println("Class Not Found Exception:"+e.getMessage());
  }
  try{
  conn=DriverManager.getConnection(url,user,pass);
  }catch(SQLException ex){
  System.out.println("SQL Exception:"+ex.getMessage());
  }
  return(conn);
  }
}

其中類connDb類為自定義類,用來產生一個連線的例項。

2、 ODBC中ADO資料模型描述:(各語言根據自身特點調整)
function ConnectOra8(dsn_name,user,password)
 set conn=server.Create("ADODB.Connection")
 conn.Connectionstring="DSN="&dsn_name&";uid="&user&";pwd="&password&";"
 conn.Open
 conn=ConnectOra8("dsn_name","user","password")
  end funcation

  sub ODBCCallPackage()
  const adOpenStatic=3
  const adCmdText=&h0001
  const adCmdStoredProcedure=&H0004
  const adParamInput=&H0001
  const adParamOutput=&H0002
  const adVarChar=200
  const adInteger=3
  const adDate=7
  SQLString="{call pkg_topnet_package.proc_password_validate(?,?,?)}"
  conn=connectOra8("conn_Ora","pepper_dog999","bad_boy2")
  set comm=server.createObject("ADODB.Command")
  with comm
  .activeConnection=conn
  .commandType=adCmdText
  .commandText=SQLString
  end with
  set pa_id=comm.CreateParameter(pa_id,adInteger,adParamInput,12)
 pa_id.value=10001
 comm.parameters.append pa_id
 set pb_yhpwd=comm.CreateParameter(pb_yhpwd,adVarChar,adParamInput,20)
 pb_yhpwd.value="pass1"
 comm.parameters.append pb_yhpwd
 'output
 set pb_name=comm.CreateParameter(pp_name,adVarChar,adParamOutput,20)
 comm.parameters.append pb_name
  comm.execute
  response.write “the output param is member_name and it’s value is”&pb_name
  end sub

三、 優越性描述:
使用統一的包(package)管理可以將開發過程中無序的開發工作協調,而又不會對現有的程式碼造成太大的改動。其優點如下:
1、 的管理:可以由專人管理包的更新,和包頭描述的發放,由於隱藏了包體,可以使不太熟悉該開發需求的人很快的上手,因為前端開發的格式可以統一。
2、 的改善:可以將核心的過程和效能要求較高的過程封裝包體中,對效能提升大有好處。
3、 程式碼的管理:由於包體和前端的分離,當需求改變時可以很快的修改。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-988104/,如需轉載,請註明出處,否則將追究法律責任。

相關文章