質問編集履歴
3
見た目を変更
test
CHANGED
File without changes
|
test
CHANGED
@@ -31,16 +31,19 @@
|
|
31
31
|
|
32
32
|
DB接続を取得する、開く、閉じる、より良いタイミング(場所)はどこでしょうか。
|
33
33
|
|
34
|
-
#### 現在の実装
|
34
|
+
#### 現在の実装 - ビジネスロジッククラスで接続を管理
|
35
|
+
ビジネスロジッククラスがDatabaseConnectionManagerを呼んで接続を管理
|
36
|
+
接続をDAOとトランザクションクラスに渡す
|
37
|
+
トランザクションクラスやDAOのメソッドを呼び出す
|
35
38
|
|
36
|
-
|
39
|
+
##### 現在の実装 - 懸念
|
37
|
-
|
38
|
-
|
40
|
+
この方法だとデータソースへの接続が何であるかをビジネスロジックが知らなければなりません。
|
39
41
|
|
40
42
|
データソースがデータベースからCSVファイルとなった際にビジネスロジックにも影響してしまいます。DAOの利点はデータソースの変更の影響をビジネスロジックに与えないことでもあったと記憶していますが、これが覆ってしまいませんでしょうか。
|
41
43
|
|
42
|
-
#### 改善案1
|
44
|
+
#### 改善案1 - DAOで接続を管理
|
43
45
|
|
44
46
|
DAOのコンストラクタもしくは各メソッドにて、DatabaseConnectionManagerを呼び出して接続を取得し、接続が閉じていれば開きます。ビジネスロジックが接続を管理する必要は無くなります。
|
45
47
|
|
48
|
+
##### 改善案1 - 懸念
|
46
|
-
|
49
|
+
Daoに接続のCloseをさせる場合、Dao1でもDao2でも同じ接続先のCloseを行えてしまい、なんだか統一感がない気がします。
|
2
見た目を変更
test
CHANGED
File without changes
|
test
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
|
11
11
|
言語はQtを使ったC++です。
|
12
12
|
|
13
|
-
クラス構成
|
13
|
+
#### クラス構成
|
14
14
|
|
15
15
|
ビジネスロジッククラス
|
16
16
|
DAO1, DAO2, TransactionManagerインスタンスを作成してトランザクションやDAOメソッドの呼び出し
|
1
改善案を追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
SQLiteデータベースには複数のテーブルがあり、各テーブルごとに一つのDAOを作成します。よって、複数のDAOが同じ接続先に対してデータアクセスを行います。
|
6
6
|
|
7
|
-
DAO1とDAO2は、同じトランザクションでクエリを実行する場合があります。
|
7
|
+
DAO1とDAO2は、同じトランザクションでクエリを実行する場合があります。よって、DAOのデータアクセスメソッドで接続をCloseすることはできません。
|
8
8
|
|
9
9
|
大抵のフレームワークなどはDBへの接続プールを持っているため、Open、Closeのコストはかかりません。「DB接続が開かれたら都度閉じられることを保証する」ため、「使い終わった接続は都度閉じる」ようにするべきとのことです。
|
10
10
|
|
@@ -31,8 +31,16 @@
|
|
31
31
|
|
32
32
|
DB接続を取得する、開く、閉じる、より良いタイミング(場所)はどこでしょうか。
|
33
33
|
|
34
|
+
#### 現在の実装
|
35
|
+
|
34
|
-
|
36
|
+
ビジネスロジッククラスで接続を管理し、接続をDAOとトランザクションクラスに渡し、トランザクションクラスやDAOの各データアクセスメソッドを呼び出しています。
|
35
37
|
|
36
38
|
ただ、この方法だとデータソースへの接続が何であるかをビジネスロジックが知らなければなりません。
|
37
39
|
|
38
40
|
データソースがデータベースからCSVファイルとなった際にビジネスロジックにも影響してしまいます。DAOの利点はデータソースの変更の影響をビジネスロジックに与えないことでもあったと記憶していますが、これが覆ってしまいませんでしょうか。
|
41
|
+
|
42
|
+
#### 改善案1
|
43
|
+
|
44
|
+
DAOのコンストラクタもしくは各メソッドにて、DatabaseConnectionManagerを呼び出して接続を取得し、接続が閉じていれば開きます。ビジネスロジックが接続を管理する必要は無くなります。
|
45
|
+
|
46
|
+
ただ、Daoに接続のCloseをさせる場合、Dao1でもDao2でも同じ接続先のCloseを行えてしまい、なんだか統一感がない気がします。
|