JP2007004503A - プログラム変換方式およびプログラム変換方法およびコード変換プログラム - Google Patents
プログラム変換方式およびプログラム変換方法およびコード変換プログラム Download PDFInfo
- Publication number
- JP2007004503A JP2007004503A JP2005184222A JP2005184222A JP2007004503A JP 2007004503 A JP2007004503 A JP 2007004503A JP 2005184222 A JP2005184222 A JP 2005184222A JP 2005184222 A JP2005184222 A JP 2005184222A JP 2007004503 A JP2007004503 A JP 2007004503A
- Authority
- JP
- Japan
- Prior art keywords
- code
- data access
- source
- program
- dao
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
【解決手段】 まず、データアクセスコード抽出部31は、ソースコードからデータアクセスコードを抽出する。次に、データアクセス情報生成部33は、抽出したデータアクセスコードを分析し、データアクセスコードの種別、パラメータ、条件などを有するデータアクセス情報を生成する。コード生成部35は、データアクセスコード抽出部31により抽出分解されたソースコード及びデータアクセスコードと、データアクセス情報生成部33により生成されたデータアクセス情報とに基づき、機械的にデータアクセスコードと業務ロジックとを分割する。また、同時に、コード生成部35は、データアクセスコードに対してDAOパターンを適用する。
【選択図】 図2
Description
一方、特開2000−347910号公報では、業務ロジックを実行するプログラムからSQL文を分離して管理することにより、データベースシステムが変更された場合のSQL文の修正をしやすくする方法が開示されている。
また、非特許文献1では、データベースが記憶するデータにアクセスする手段を、業務ロジックを実行するプログラムから隠蔽するためのプログラム構成が開示されている。非特許文献1において、上記のプログラム構成をDAO(Data Access Object)パターンという呼び名で提案されている。
また、特開2000−347910号公報では、業務ロジックを実行するプログラムからSQL文を分離して管理するが、SQL文が埋め込まれたプログラムからSQL文を分離するには、手作業によらなければならないという課題があった。
本発明は、上記のような課題を解決するためになされたもので、プログラムに埋込まれたSQL文などに代表されるデータアクセスコードを、業務ロジックから機械的に分割することを目的とする。本発明は、特に上記DAOパターンなどを適用した形に機械的に変換することにより、業務ロジックからデータにアクセスする手段を隠蔽することを目的とする。
図1において、プログラム変換方式100は、プログラムを実行するCPU(Central Processing Unit)911を備えている。CPU911は、バス912を介してROM913、RAM914、通信ボード915、CRT表示装置901、K/B(キーボード)902、マウス903、FDD(Flexible Disk Drive)904、磁気ディスク装置920、CDD905と接続されている。
CPU911は、処理装置の一例である。
RAM914は、揮発性メモリの一例である。ROM913、FDD904、CDD905、磁気ディスク装置920は、不揮発性メモリの一例である。これらは、記憶装置の一例である。
通信ボード915は、LAN、無線アンテナ等に接続されている。
例えば、通信ボード915、K/B902、FDD904、CDD905などは、入力装置の一例である。
また、例えば、通信ボード915、CRT表示装置901などは、出力装置の一例である。
磁気ディスク装置920には、オペレーティングシステム(OS)921、ウィンドウシステム922、プログラム群923、ファイル群924が記憶されている。プログラム群923は、CPU911、OS921、ウィンドウシステム922により実行される。
ファイル群924には、以下に述べる実施の形態の説明において、「〜の判定」として説明するものが、「〜ファイル」として記憶されている。
また、以下に述べる実施の形態の説明において説明するフローチャートの矢印の部分は主としてデータの入出力を示し、そのデータの入出力のためにデータは、磁気ディスク装置920、FD(Flexible Disk)、光ディスク、CD(コンパクトディスク)、MD(ミニディスク)、DVD(Digital Versatile Disk)等のその他の記録媒体に記録される。あるいは、信号線やその他の伝送媒体により伝送される。
実施の形態1では、SQLなどで記述されたデータアクセスコードを有するソースコードを、データアクセスコードと業務ロジックとに分割する方法について説明する。特に、上記DAOパターンなどを適用した形のコードを生成する方法について説明する。
プログラム変換方式100は、ソースコード記憶部10、ソースコード読込部20、プログラム生成部30、生成コード記憶部40、アクセスコード識別情報記憶部50を備える。
ソースコード記憶部10は、図1に示す入力装置などが入力したSQLなどで記述されたデータアクセスコードを有するソースコードを記憶装置に記憶する。ここでは、データアクセスコードは、SQLで記述されているものとする。しかし、データアクセスコードは、SQLで記述されていることに限定されず、データベースへアクセスするためのプログラムであれば他のものでも構わない。
ソースコード読込部20は、ソースコード記憶部10が記憶装置に記憶したソースコードを読込む。また、ソースコード読込部20は、読込んだソースコードをプログラム生成部30へ入力する。
プログラム生成部30は、ソースコード読込部20が入力したソースコードに基づいて、アクセス実行コードとロジックコードとインターフェースコードとを処理装置によって生成する。ここでは、アクセス実行コードは、DAOコードであるとする。また、インターフェースコードは、DTOコードであるとする。アクセス実行コードとロジックコードとインターフェースコード、およびDAOコードとDTOコードとについては後述する。プログラム生成部30は、データアクセスコード抽出部31、データアクセスコード記憶部32、データアクセス情報生成部33、データアクセス情報記憶部34、コード生成部35を備える。データアクセスコード抽出部31は、データアクセスコードを処理装置によって識別する。そして、データアクセスコード抽出部31は、ソースコード読込部20が入力したソースコードが有するデータアクセスコードを識別して、抽出する。つまり、ここでは、データアクセスコード抽出部31は、ソースコードからデータアクセスコードとしてSQL文を抽出する。データアクセスコード記憶部32は、データアクセスコード抽出部31が抽出したデータアクセスコードを記憶装置に記憶する。データアクセス情報生成部33は、データアクセスコード記憶部32が記憶装置に記憶したデータアクセスコードを解析し、データアクセス情報200を生成する。データアクセス情報生成部33は、データアクセス情報200を生成する場合に、アクセスコード識別情報記憶部50が記憶する情報を参照する。データアクセス情報200の構成を図3に示す。データアクセス情報200については後述する。データアクセス情報記憶部34は、データアクセス情報生成部33が生成したデータアクセス情報200を記憶装置に記憶する。コード生成部35は、データアクセスコード記憶部32が記憶装置に記憶したデータアクセスコードとデータアクセス情報記憶部34が記憶装置に記憶したデータアクセス情報200とに基づいて、アクセス実行コードとロジックコードとインターフェースコードとを処理装置によって生成する。つまり、ここでは、コード生成部35は、DAOコードとロジックコードとDTOコードとを生成する。コード生成部35は、オブジェクト生成部36、ロジックコード生成部37を備える。オブジェクト生成部36は、データアクセス情報記憶部34が記憶装置に記憶したデータアクセス情報200に基づいて、ソースコード読込部20が入力したソースコードからアクセス実行コードとインターフェースコードと生成する。つまり、ここでは、オブジェクト生成部36は、DAOコードとDTOコードとを生成する。ロジックコード生成部37は、データアクセス情報記憶部34が記憶装置に記憶したデータアクセス情報200に基づいて、ソースコード読込部20が入力したソースコードから、ロジックコードを生成する。
生成コード記憶部40は、プログラム生成部30が生成したDAOコードとロジックコードとDTOコードと記憶装置に記憶する。
アクセスコード識別情報記憶部50は、データアクセス情報生成部33においてデータアクセス情報200の生成に使用するデータアクセスコードの情報を記憶装置に記憶する。
アクセス実行コードは、データアクセスコードを実行する処理を呼出すコードを有する。つまり、他のプログラムなどからアクセス実行コードが呼出されることにより、データアクセスコードが実行される。
ロジックコードは、データアクセスコードの代わりに、上記アクセス実行コードを呼出すことによりデータソースを操作するコードを有するソースコードである。つまり、ロジックコードは、業務ロジックが記述されており、データアクセスの処理に関しては、アクセス実行コードを呼出すことにより実現する。つまり、ロジックコードは、ソースコードが有するデータアクセスコードが記述されていた部分を、アクセス実行コードと、インターフェースコードとソースコードが備える変数とのインターフェースに置換したプログラムである。
インターフェースコードは、アクセス実行コードとロジックコードとの間のインターフェースに使用する変数を有する。
DAOコードは、アクセス実行コードの一例である。DAOコードは、非特許文献1にて開示されているデータベースが記憶するデータにアクセスする手段を、業務ロジックを実行するプログラムから隠蔽するためのプログラム構成なども持ったプログラムである。DAOコードは、データアクセスコードを実行するAPIを呼出すメソッドを有するプログラムである。つまり、ここでは、DAOコードは、SQL文を実行するAPIを呼出すメソッドを有するプログラムである。
DTOコードは、インターフェースコードの一例である。DTOコードは、DAOコードとロジックコードとの間のインターフェースに使用する変数を有するプログラムである。つまり、ロジックコードは、DAOコードへ値を渡す場合、またはDAOコードから値を受取る場合に、DTOコードを経由する。
データアクセス情報200は、SQL文認識情報210、DAO生成情報220、DTO生成情報230を備える。
ソース識別子211は、プログラムソースを一意に識別する。ソースコードの名前と変換が実行された日時となどから生成する。ソース識別子211に日時を含める理由は、同じプログラムを2度以上変換した場合、変換後の各プログラムを別のものとして扱うためである。同じ名称のソースコードを入力されたとしても、プログラムの内容が異なる可能性があるのためである。また1つのソースコードが有するSQL文の中で宣言される変数名の名前空間が異なる場合は、それぞれ異なるソース識別子211を生成する。ここで、SQL文の中で宣言される変数名とは、例えば、カーソル名である。
表名組212は、SQL文が操作する表の名前である。データアクセス情報生成部33は、SQLの構文にしたがって表名を認識する。図4は、SQLの構文の一例を示す。表名組212は、例えば、図4に示すSELECT文310などで表名が複数指定されたときは、表名の組を区切り文字、例えば「,」で区切ったものをSQL文認識情報210の表名組212とする。この場合に表名は、文字順序の大小順で、あるいは変換するプログラムにおいて設定された順序などで並び替える。このように並び替えることで、SQL文認識情報210の表名の比較を行うときに、元のSQL文で表名の指定順序が違っている場合にも、含んでいる表名が一致するものは同一であるとみなすことが可能となる。
操作種別213は、SELECT、INSERT、UPDATE、DELETEなどのSQL文の種別である。
カーソル名214は、SQL文のDECLARE CURSOR文350やFETCH文370などで使用するカーソル名である。カーソルを使用しない文では空欄とする。
付帯条件215は、SQL文の操作条件を示すものである。図4に示すSQLの構文を例にして説明する。付帯条件215は、例えば、SELECT文310、DELETE文340ではWHERE句以降に示す内容である。INSERT文320では列名以降に示す内容である。UPDATE文330ではSET句およびWHERE句以降に示す内容である。DECLARE CURSOR文350ではそれに含まれるSELECT文310の付帯条件215である。FETCH文370の付帯条件215は空欄とする。ただし、付帯条件215の中に、ホスト変数または定数が指定されたときは、それを代替文字に置き換える。代替文字とは、例えば、「?」などである。
パラメータ216は、付帯条件215の中で置き換えられたホスト変数または定数を、付帯条件215の中に現れた順序で区切り文字で区切って並べたものである。区切り文字とは、例えば、「,」などである。
メソッド名217は、SQL文を実行するDAOコードのメソッドを呼出すときのメソッド名である。メソッド名217は、操作種別213、WHERE句に現れる列名、SQL文の認識を行ったときの出現順序などを組み合わせて生成される。メソッド名217は、SQL文認識情報210の中の、表名組212、操作種別213、付帯条件215の組に対して一意になるようにデータアクセス情報生成部33によって生成される。
表名組221は、SQL文認識情報210が備える表名組212と同様である。
DAO名222は、表名組221に対して生成するDAOコードのクラスの名前である。DAO名222は、表名組221より生成する。表名組221が複数の表名からなるときは、出力するプログラム言語のクラス名に許される区切り文字、例えば「_」などで表名を区切って生成する。出力するプログラム言語がクラス名の大文字小文字を許す場合、表名の先頭を大文字、それ以外を小文字にして並べてもよい。またDAOコードであることを表す接尾語、例えば「DAO」をつけてもよい。つまり、DAOコードのクラスは、表名組221ごとに生成される。
メソッド名223は、SQL文認識情報210が備えるメソッド名217と同様である。
パラメータ宣言224は、DAOコードのメソッド毎に指定するパラメータのデータ型と変数名との組である。パラメータ宣言224は、DAOコードが有するメソッド毎に、DTOコードのクラスの変数、または付帯条件215の中で置き換えられるホスト変数または定数の値を受け取る変数、またはその両方などのうちのどれかとする。変数名は、付帯条件215の中で置き換えられるホスト変数または定数と比較または転記の対象となる列名から生成する。あるいはパラメータ216の中の出現順序を使用してデータアクセス情報生成部33が任意に生成しても構わない。
戻り値宣言225は、DAOコードが有するメソッドの戻り値のデータ型である。戻り値宣言225は、例えば、SELECT文310の場合はDTOコードのクラス、OPEN CURSOR文360の場合は、DTOコードのクラスのリストまたは配列、INSERT文320、UPDATE文330、DELETE文340の場合は整数型または戻り値なしとする。
SQL文226は、DAOコードが有するメソッドを呼出すことにより実行されるSQL文全体である。SQL文226は、ソースコードが有するSQL文から生成する。ただし、付帯条件215の中のホスト変数または定数は、代替文字で置き換えられたものである。また、SQL文226は、SELECT文310のINTO句などの埋め込みSQLに特有の部分は取り除かれている。また、SQL文226は、例えば、DECLARE CURSOR文350の場合、SELECT文310以降からSQL文を生成などとする。つまり、SQL文226は、DAOパターンを適用しやすい形に変換されたSQL文である。SQL文226の変換については、上述したものに限定されるわけではなく、システムの仕様などによって変更しても構わない。
DTO名227は、DAOコードが有するメソッドが使用するDTOコードのクラス名である。DTO名227は、DAO名222にDTOコードであることを表す接尾語、例えば「DTO」を付ける。または、DTO名227は、DAO名222の接尾語を「DTO」に置き換えたものとする。DTO名227は、例えば、DELETE文340のように、DTOコードを使用しないメソッドでは空欄とする。
生成フラグ228は、メソッドをDAOコードにすでに生成したかどうかを示す真偽値である。
DTO名231は、DAO生成情報220のDTO名227と同様である。
変数名232は、DTOコードに格納される変数の名前である。変数名232は、SQL文に現れる列名やホスト変数名から生成する。変数名232は、例えば、SELECT文310の場合、「<選択>」部分に記載される列名である。変数名232は、例えば、「<選択>」が「*」であった場合、INTO句に指定されたホスト変数名とする。変数名232は、「<選択>」部分に記載される列が列名ではなくSQL関数であった場合、SQL文に列の別名が指定されていればその名前とし、別名がなければINTO句に指定されたホスト変数名とする。変数名232は、列名によらずホスト変数名や別名などから生成した場合は、変数名にホスト変数などを表す接頭語または接尾語をつける。変数名232は、INSERT文320の文の場合、列名が指定されていればその名前とする。また、変数名232は、INSERT文320の場合、列名が指定されていなければ、変数名の生成を行わない。変数名232は、UPDATE文330では、SET句の更新式に現れる列名を変数名として生成する。また、変数名232は、DELETE文340ではDTOコードを使用しないので変数名の生成も行わない。変数名の生成については、上述した方法に限定されるわけではなく、プログラムやシステムの仕様によって変更しても構わない。
データ型233は、変数のデータ型である。データ型233は、例えば、整数、浮動小数点数、文字列、日時などの種別を表す。データ型233は、SQL文に現れるホスト変数や定数の型より生成される。
生成フラグ234は、DTOコードのクラスの変数をすでに生成したかどうかを示す真偽値である。
まず、データアクセスコード抽出部31の動作について説明する。図6は、データアクセスコード抽出部31の動作であるデータアクセスコード抽出処理を示すフローチャートである。図6に基づいて、データアクセスコード抽出処理について説明する。データアクセスコード抽出処理では、データアクセスコード抽出部31は、ソースコードからデータアクセスコードを抽出する。
ステップS102では、データアクセスコード抽出部31は、ソースコードの終わりを認識したら、データアクセスコード抽出処理を終了し、ソースコードが終わりでないならステップS103へ進む。
ステップS103では、データアクセスコード抽出部31は、SQL文の始まりかどうかを判定する。データアクセスコード抽出部31は、SQL文の始まりであると判定した場合、ステップS104へ進み、SQL文の始まりでないと判定した場合、ステップS107へ進む。SQL文の始まりであるかどうかの判定方法については後述する。
ステップS104では、データアクセスコード抽出部31は、ソースコードから1つずつ語句を取り出す。
ステップS105では、データアクセスコード抽出部31は、SQL文の終わりかどうかを判定する。データアクセスコード抽出部31は、SQL文が終わりである場合、ステップS106へ進み、SQL文が終わりでない場合、ステップS104へ進む。つまり、ステップS104とステップS105とでは、SQL文の終わりまでを読み取る。SQL文の終わりかどうかの判定方法については後述する。
ステップS106では、データアクセスコード抽出部31は、読み取ったSQL文をデータアクセスコード記憶部32に渡す。データアクセスコード記憶部32は、SQL文を記憶する。データアクセスコード抽出部31は、SQL文をデータアクセスコード記憶部32に記憶させることなくデータアクセス情報生成部33とコード生成部35とへ渡しても構わない。
ステップS107では、データアクセスコード抽出部31は、取込んだ語句がSQL文でなかった場合、語句をSQL文と区別してデータアクセスコード記憶部32に渡す。データアクセスコード記憶部32は、受け取った語句をSQL文と区別して記憶する。または、データアクセスコード抽出部31は、取込んだ語句がSQL文でなかった場合、語句をコード生成部35へ渡しても構わない。
ステップS202とステップS203とでは、SQL文認識情報210を生成する。
ステップS202では、データアクセス情報生成部33は、取込んだSQL文からSQL文認識情報210の、表名組212、操作種別213、カーソル名214、付帯条件215、パラメータ216を生成する。データアクセス情報生成部33は、例えば、アクセスコード識別情報記憶部50が記憶したデータアクセスコードの情報を参照しても構わない。
ステップS203では、データアクセス情報生成部33は、生成した表名組212、操作種別213、付帯条件215の組をデータアクセス情報記憶部34が記憶する表名組212、操作種別213、付帯条件215の組と比較する。
ステップS204では、データアクセス情報生成部33は、表名組212、操作種別213、付帯条件215の組が一致するSQL文認識情報210をデータアクセス情報記憶部34が記憶している場合、ステップS205へ進み、記憶していない場合、ステップS206へ進む。
ステップS205では、データアクセス情報生成部33は、生成したSQL文認識情報210をデータアクセス情報記憶部34へ渡す。データアクセス情報記憶部34は、SQL文認識情報210を記憶する。データアクセス情報生成部33は、コード生成部35へSQL文認識情報210を渡しても構わない。
ステップS206では、データアクセス情報生成部33は、メソッド名217を生成する。そして、データアクセス情報生成部33は、SQL文認識情報210をデータアクセス情報記憶部34へ渡す。データアクセス情報記憶部34は、SQL文認識情報210を記憶する。
ステップS207では、データアクセス情報生成部33は、DAO生成情報220を生成する。そして、データアクセス情報生成部33は、DAO生成情報220をデータアクセス情報記憶部34へ渡す。データアクセス情報記憶部34は、DAO生成情報220を記憶する。
ステップS208では、データアクセス情報生成部33は、生成したメソッド名217とDAO生成情報220とを追加したSQL文認識情報210をデータアクセス情報記憶部34へ渡す。データアクセス情報記憶部34は、SQL文認識情報210を記憶する。データアクセス情報生成部33は、コード生成部35へSQL文認識情報210を渡しても構わない。
データアクセス情報生成部33は、ステップS204の場合分けを行うことで、同じSQL文を実行するメソッドの情報を複数生成しない。このことにより、後述するオブジェクトコード、ロジックコード生成処理において、同じSQL文を実行するDAOコードのメソッドを複数生成しない。
ステップS209では、データアクセス情報生成部33は、SQL文に現れる0個以上のDTO生成情報230の変数名232を生成する。
ステップS210では、データアクセス情報生成部33は、生成したDTO生成情報230の変数名232のそれぞれに注目する。
ステップS211では、データアクセス情報生成部33は、生成したDTO生成情報230の変数でステップS212以降の処理していないものがないかどうかを判定する。データアクセス情報生成部33は、処理していないものがある場合、ステップS212へ進み、処理していないものがない場合、処理を終了する。
ステップS212では、データアクセス情報生成部33は、生成した変数とデータアクセス情報記憶部34が記憶するDTO生成情報230とを比較する。
ステップS213では、データアクセス情報生成部33は、生成した変数と一致するDTO生成情報230をデータアクセス情報記憶部34が記憶しているかを判定する。データアクセス情報生成部33は、記憶していると判定した場合、ステップS210へ進み、記憶していないと判定した場合、ステップS214へ進む。
ステップS214では、データアクセス情報生成部33は、DTO生成情報230を生成する。そして、データアクセス情報生成部33は、DTO生成情報230をデータアクセス情報記憶部34へ渡す。データアクセス情報記憶部34は、DTO生成情報230を記憶する。
SELECT文310の場合、まず、ロジックコード生成部37は、例えば、ロジックコードにはDAOコードのメソッドを呼出すコードを出力する。ここで、DAOコードのメソッドのパラメータは、SQL文認識情報210のパラメータ216である。また、メソッドの戻り値は、DAO生成情報220で指定されたDTOコードのクラスである。戻り値を格納する変数名は、変数名を一意にするため、例えば、DTO名227にソースコードでの出現順序などを付加したものとする。次に、ロジックコード生成部37は、戻り値のDTOクラスから、INTO句のホスト変数に値を転記するコードを出力する。
INSERT文320およびUPDATE文330の場合、まず、ロジックコード生成部37は、ロジックコードに、DTOコードのクラスの変数を宣言するコードと、DAOコードのクラスの変数にオブジェクトを割り当てるコードを出力する。次に、ロジックコード生成部37は、付帯条件215の中で指定されたホスト変数および定数の値をDTOコードのクラスの変数に転記するコードを生成し、次にDAOメソッドを呼出すコードを出力する。DAOコードのメソッドのパラメータは、DTOクラスの変数と、SQL文認識情報210のパラメータの両方である。
DELETE文340の場合、ロジックコード生成部37は、ロジックコードに、DAOメソッドを呼出すコードを出力する。メソッドのパラメータは、SQL文認識情報210のパラメータである。
DECLARE CURSOR文350の場合、ロジックコード生成部37は、ロジックコードにコードの出力は行わない。
OPEN CURSOR文360の場合、ロジックコード生成部37は、ロジックコードにDAOコードのメソッドを呼出すコードを出力する。メソッドのパラメータは、SQL文認識情報210のパラメータ216である。メソッドの戻り値はDAO生成情報220で指定されたDAOクラスのオブジェクトのリストまたは配列である。戻り値を格納する変数名は、カーソル名から生成する。
FETCH文370の場合、ロジックコード生成部37は、OPEN CURSOR文360に対応して生成したメソッドの戻り値から、1つのDTOオブジェクトを取り出すコードと、INTO句のホスト変数に値を転記するコードと、次にFETCH文370が実行された場合にリストまたは配列から取り出されるDTOオブジェクトの位置指示子を1つ進めるコードを出力する。
CLOSE CURSOR文380の場合、ロジックコード生成部37は、OPEN CURSOR文に対応して生成した戻り値を格納する変数を無効化するコードを生成する。ロジックコード生成部37は、例えば、変数を無効化するコードとして空オブジェクトを代入するコードを生成する。
ステップS309では、オブジェクト生成部36は、DAO生成情報220の生成フラグ228が未生成を示すかどうかを判定する。オブジェクト生成部36は、生成フラグ228が未生成を示す場合、ステップS310へ進み、生成フラグ228が未生成を示さない場合、ステップS313へ進む。
ここで、ステップS310での判定の対象となったDAO名222は、表名組221に基づき付けられている。また、表名組221は、SQL文が操作する表の組に基づき生成されている。つまり、ステップS310とステップS311とでは、SQL文が操作する表の組に対して、DAOコードのクラスが未生成である場合はDAOコードのクラスを宣言するコードを生成し、DAOコードのクラスが未生成でない場合はDAOコードのクラスを宣言するコードを生成しない。従って、DAOコードのクラスは、SQL文が操作する表の組ごとに生成され、同じ表の組に対して重複して生成されることはない。
オブジェクト生成部36は、ステップS309とステップS310との場合分けを行うことで、同じSQL文を実行するメソッドを複数生成することを防ぐ。つまり、オブジェクト生成部36は、同じデータアクセスコードを実行するメソッドを複数生成することを防ぐ。
ステップS313では、オブジェクト生成部36は、DAO生成情報220の中のDTO名227をキーにしてDTO生成情報230を取得する。
また、上記のDAOコード生成ステップとDTOコード生成ステップとを合わせたものがオブジェクト生成ステップである。
また、変換されたソースコードは、DAOパターンが適用されているので、データベースの実装が変更されても、業務ロジックへの影響を及ぼさないようにすることも可能である。したがって、実施の形態1によれば、プログラムの移植性および保守性が向上する。
また、実施の形態1では、同じ表、または表の組を操作するメソッドを1つのDAOコードのクラスにまとめることによって、1クラス1メソッドとする場合と比較して生成するDAOコードのクラスの数を減らすことができる。そのため、実施の形態1では、ソース管理が容易になる。また、実施の形態1では、データベースの1つの表について変更があった場合、影響がおよぶDAOコードのクラスの数が少なくなる。従って、実施の形態1では、保守作業が容易になる。
また、実施の形態1では、SQL文認識情報210の比較を行うことによって、同じSQL文を実行するメソッドの重複生成を防ぐ。従って、実施の形態1では、変換後のソースのコード量を少なくすることができる。さらに、実施の形態1では、1つのSQL文について変更があった場合、影響がおよぶメソッドの数が1つで済む。従って、実施の形態1では、保守作業が容易となる。
次に、実施の形態2について説明する。実施の形態2では、ソースコードにおいて、SQL文以外のコードを記述するプログラム言語を変更する機能を実施の形態1に示すプログラム変換方式100に追加する。
つまり、プログラム言語変換部38は、図8に示すフローチャートのステップS304、ステップS307、ステップS308において、目的のプログラム言語にソースコードなどを変換する。
Claims (10)
- データソースを操作するデータアクセスコードを有するソースコードを記憶装置に記憶するソースコード記憶部と、
上記ソースコード記憶部が記憶装置に記憶したソースコードを読込むソースコード読込部と、
上記ソースコード読込部が読込んだソースコードに基づいて、
データアクセスコードを実行するAPI(Application Program Interface)を呼出すメソッドを有するDAO(Data Access Object)コードと、
データアクセスコードの代わりに、上記DAOコードのメソッドを呼出すことによりデータソースを操作するコードを実行するソースコードであるロジックコードと、
上記DAOコードと上記ロジックコードとの間のインターフェースに使用する変数を有するDTO(Data Transfer Object)コードと
を処理装置を用いて生成するプログラム生成部と、
上記プログラム生成部が生成したDAOコードとロジックコードとDTOコードとを記憶装置に記憶する生成コード記憶部と
を備えることを特徴とするプログラム変換方式。 - 上記プログラム生成部は、
処理装置を用いて、データアクセスコードを識別し、ソースコードからデータアクセスコードを抽出するデータアクセスコード抽出部と、
上記データアクセスコード抽出部が抽出したデータアクセスコードを記憶装置に記憶するデータアクセスコード記憶部と、
処理装置を用いて、上記データアクセスコード記憶部が記憶装置に記憶したデータアクセスコードを読込み、上記データアクセスコードを解析することによりデータアクセスコードを構成する情報であるデータアクセス情報を生成するデータアクセス情報生成部と、
上記データアクセス情報生成部が生成したデータアクセス情報を記憶装置に記憶するデータアクセス情報記憶部と、
処理装置を用いて、上記データアクセス情報記憶部が記憶装置に記憶したデータアクセス情報を読込み、データアクセス情報に基づいてDAOコードとDTOコードとを生成するオブジェクト生成部と、
処理装置を用いて、ソースコードにおけるデータアクセスコードを、上記オブジェクト生成部が生成したDAOコードが有する、上記データアクセスコードを実行するメソッドを呼出す呼出しコードと、上記オブジェクト生成部が生成したDTOコードの変数と上記データアクセスコードが使用するホスト変数とのインターフェースとに置換することによりロジックコードを生成するロジックコード生成部と
を備えることを特徴とする請求項1記載のプログラム変換方式。 - 上記プログラム生成部は、上記DAOコードとして、操作するデータソースの単位が同じデータアクセスコードを実行するAPIの呼出し文を出力するメソッドを同じクラスに有するDAOコードを生成する
ことを特徴とする請求項1記載のプログラム変換方式。 - 上記ソースコード記憶部は、データソースとしてRDB(Relational DataBase)を操作するデータアクセスコードを有するソースコードを記憶装置に記憶し、
上記プログラム生成部は、上記DAOコードとして、操作する表の組が同じデータアクセスコードを実行するAPIの呼出し文を出力するメソッドを同じクラスに有するDAOコードを生成する
ことを特徴とする請求項1記載のプログラム変換方式。 - 上記プログラム生成部は、ソースコードに同じデータアクセスコードが存在した場合、上記データアクセスコードを実行するAPIの呼出し文を出力するメソッドを1つのみ有するDAOコードを生成する
ことを特徴とする請求項1記載のプログラム変換方式。 - 上記プログラム生成部は、さらに、
ソースコードを記述するプログラム言語を、処理装置を用いて他のプログラム言語へ変換するプログラム言語変換部
を備えることを特徴とする請求項1記載のプログラム変換方式。 - 上記ソースコード記憶部は、データアクセスコードとしてSQL(Structured Query Language)で記述されたデータアクセスコードを有するソースコードを記憶することを特徴とする請求項1記載のプログラム変換方式。
- データソースを操作するデータアクセスコードを有するソースコードを記憶装置に記憶するソースコード記憶部と、
上記ソースコード記憶部が記憶装置に記憶したソースコードを読込むソースコード読込部と、
上記ソースコード読込部が読込んだソースコードに基づいて、
データアクセスコードを実行する処理を呼出すコードを有するアクセス実行コードと、
データアクセスコードの代わりに、上記アクセス実行コードを呼出すことによりデータソースを操作するコード実行するソースコードであるロジックコードと、
上記アクセス実行コードと上記ロジックコードとの間のインターフェースに使用する変数を有するインターフェースコードと
を処理装置を用いて生成するプログラム生成部と、
上記プログラム生成部が生成したアクセス実行コードとロジックコードとインターフェースコードとを記憶装置に記憶する生成コード記憶部と
を備えることを特徴とするプログラム変換方式。 - データソースを操作するデータアクセスコードを有するソースコードを記憶装置に記憶するソースコード記憶ステップと、
上記ソースコード記憶ステップで記憶装置に記憶したソースコードを読込むソースコード読込ステップと、
上記ソースコード読込ステップで読込んだソースコードに基づいて、
データアクセスコードを実行するAPI(Application Program Interface)を呼出すメソッドを有するDAO(Data Access Object)コードと、
データアクセスコードの代わりに、上記DAOコードのメソッドを呼出すことによりデータソースを操作するコード実行するソースコードであるロジックコードと、
上記DAOコードと上記ロジックコードとの間のインターフェースに使用する変数を有するDTO(Data Transfer Object)コードと
を処理装置を用いて生成するプログラム生成ステップと、
上記プログラム生成ステップで生成したDAOコードとロジックコードとDTOコードとを記憶装置に記憶する生成コード記憶ステップと
をコンピュータに実行させることを特徴とするコード変換プログラム。 - データソースを操作するデータアクセスコードを有するソースコードを記憶装置に記憶するソースコード記憶ステップと、
上記ソースコード記憶ステップで記憶装置に記憶したソースコードを読込むソースコード読込ステップと、
上記ソースコード読込ステップで読込んだソースコードに基づいて、
データアクセスコードを実行するAPI(Application Program Interface)を呼出すメソッドを有するDAO(Data Access Object)コードと、
データアクセスコードの代わりに、上記DAOコードのメソッドを呼出すことによりデータソースを操作するコード実行するソースコードであるロジックコードと、
上記DAOコードと上記ロジックコードとの間のインターフェースに使用する変数を有するDTO(Data Transfer Object)コードと
を処理装置を用いて生成するプログラム生成ステップと、
上記プログラム生成ステップで生成したDAOコードとロジックコードとDTOコードとを記憶装置に記憶する生成コード記憶ステップと
を備えることを特徴とするプログラム変換方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2005184222A JP2007004503A (ja) | 2005-06-24 | 2005-06-24 | プログラム変換方式およびプログラム変換方法およびコード変換プログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2005184222A JP2007004503A (ja) | 2005-06-24 | 2005-06-24 | プログラム変換方式およびプログラム変換方法およびコード変換プログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2007004503A true JP2007004503A (ja) | 2007-01-11 |
Family
ID=37690070
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2005184222A Pending JP2007004503A (ja) | 2005-06-24 | 2005-06-24 | プログラム変換方式およびプログラム変換方法およびコード変換プログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2007004503A (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5405684B1 (ja) * | 2013-03-28 | 2014-02-05 | 株式会社バリュー | ソースプログラムのプログラミング言語変換装置 |
KR20140060299A (ko) * | 2011-09-07 | 2014-05-19 | 마이크로소프트 코포레이션 | 변형 컨텍스트-인식 데이터 소스 관리 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2003150377A (ja) * | 2001-11-16 | 2003-05-23 | Nec Corp | 画面出力モジュール開発システム、画面出力モジュール開発方法及びプログラム並びに記録媒体 |
-
2005
- 2005-06-24 JP JP2005184222A patent/JP2007004503A/ja active Pending
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2003150377A (ja) * | 2001-11-16 | 2003-05-23 | Nec Corp | 画面出力モジュール開発システム、画面出力モジュール開発方法及びプログラム並びに記録媒体 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20140060299A (ko) * | 2011-09-07 | 2014-05-19 | 마이크로소프트 코포레이션 | 변형 컨텍스트-인식 데이터 소스 관리 |
KR101944570B1 (ko) | 2011-09-07 | 2019-01-31 | 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 | 변형 컨텍스트-인식 데이터 소스 관리 |
JP5405684B1 (ja) * | 2013-03-28 | 2014-02-05 | 株式会社バリュー | ソースプログラムのプログラミング言語変換装置 |
JP2014191738A (ja) * | 2013-03-28 | 2014-10-06 | Value:Kk | ソースプログラムのプログラミング言語変換装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100470480C (zh) | 分析程序加速器装置以及更新其的方法 | |
US7958133B2 (en) | Application conversion of source data | |
JP2009266244A (ja) | 簡潔言語学データを生成かつ使用するシステムおよび方法 | |
JP2009237762A (ja) | プログラム解析装置、プログラム解析方法および解析プログラム | |
JP2011034246A (ja) | データ変換装置、データ変換方法、およびデータ変換プログラム | |
US20020026632A1 (en) | Universal computer code generator | |
JP3372532B2 (ja) | 感情情報抽出方法および感情情報抽出プログラムの計算機読み取り可能な記録媒体 | |
JP2019191900A (ja) | 言語特徴の抽出装置、固有表現の抽出装置、抽出方法、及びプログラム | |
JP6805720B2 (ja) | データ検索プログラム、データ検索装置およびデータ検索方法 | |
JP6651974B2 (ja) | 情報処理装置、コンパイル方法及びコンパイラプログラム | |
JP2007004503A (ja) | プログラム変換方式およびプログラム変換方法およびコード変換プログラム | |
JP2000201080A (ja) | 付加コ―ドを用いたデ―タ圧縮/復元装置および方法 | |
JP2006146613A (ja) | プログラム変換方法 | |
JP4734400B2 (ja) | 文書検索装置およびプログラム | |
EP3255558A1 (en) | Syntax analyzing device, learning device, machine translation device and recording medium | |
JP4791205B2 (ja) | 差分生成装置及び差分適用装置及び差分生成プログラム及び差分適用プログラム | |
JP7096634B2 (ja) | 音声認識支援装置、音声認識支援方法及び音声認識支援プログラム | |
JP4311327B2 (ja) | ソースコード自動生成装置、ソースコード自動生成方法、プログラムおよび記録媒体 | |
JP7083473B2 (ja) | 入力支援装置 | |
JPS59736A (ja) | 構文解析方式 | |
JP7200474B2 (ja) | 変換補助装置、変換補助システム、変換補助方法及びコンピュータプログラム | |
JP4399154B2 (ja) | 翻訳装置、及び翻訳プログラム | |
JP4061283B2 (ja) | 字句をデータに変換する装置、方法及びプログラム | |
Wiedenhoeft et al. | Using HaMMLET for Bayesian Segmentation of WGS Read-Depth Data | |
JP2016134754A (ja) | 変換処理プログラム、情報処理装置および変換処理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20080404 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20100426 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20110315 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20110425 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20110524 |