C# Access(accdb) 比較

業者製作のAccessファイル+クライアントで、クライアントプログラム側で操作した結果が
Access内部でどう変更されるか調べようと思ったがAccessファイルが大きすぎた。

C# 設計メモ

順不同。思いつたら更新。

・クラスの単位

GUIのフォーム単位のクラスが基本(GUIがなければユースケース管理)で、その中で必要に応じてクラスに抜き出す。

1.変更の発生しそうな部分をクラスに抜き出す。
拡張ポイント(DI)

2.共通で使う部分をクラスに抜き出す。
アダプター(合成+委譲)で共通化
ストラテジー

3.他クラスから参照される部分をクラスに抜き出す。

4.テストしたい部分をクラスに抜き出す。

5.インスタンス生成をクラスに抜き出す。
生成処理を1箇所にまとめることで変更に対応しやすく。
DIが連続して上位レイヤーに引数が溢れてきたら。
(作ると使うを分ける)

6.プリミティブな値に型定義する場合。
値オブジェクト

・クラス、インターフェース、メソッド

参照と変更を分ける(CQS)。意味のある名前にする。スコープが大きいのに一文字変数名や、ハードコーディングしている数値など避ける。とりあえずメソッドは小さく。

・レイヤー

適切にクラス分けしていけば最終的に自然とレイヤーに当てはまる形になっているのでそれほど意識しない。

・依存関係のコントロール

クラス間の依存をインターフェースへの依存にすること。派生クラスの追加で対応する。拡張ポイントと呼ぶ場合もある。

 

・DB系

DBの依存関係。FKがある方が依存している。依存している方が子。PKは重複できないけど、FKは重複できるので、FKある方が多。

複合主キーとなっている関係従属を取り除く正規化は当たり前に発生するので、正しいモデリングをすると必然的に複合主キーが現れる。サロゲートキーを入れる場合、制約はアプリ側で対応する。例えば仕入価格を、仕入先・商品・開始年月で識別するような場合。

参照整合性。実務では完全な制約が必要ではなく、緩い制約の方が都合がいいときもある。ただし、構造が壊れやすくはなるので注意。

SQL DB正規化

直ぐ忘れてしまう。

先ず、一方の値が決まると他方も決まるものを、関数従属性という。

第一正規化

一つのセルに複数のデータを持たない。

第二正規化

部分関数従属を取り除く。
部分関数従属とは、主キーの一部だけで一意に決まる列のこと。

主キーが複数あり、その内の一つだけで値が決まるものを別のテーブルにする。

第三正規化

推移的関数従属を取り除く。

推移的関数従属とは、テーブル内の段階的な関数従属のこと。
つまり、主キー以外と関数従属があること。

主キー以外の項目で、他の列の値を一意に決めるものを別テーブルにする。

例えば、(主)社員ID → 部署コード → 部署名

部署コードが決まれば部署名が決まる。当然主である社員IDと部署コードは関数従属の関係なので、
段階的な関数従属があるといえる。

部分関数従属、推移的関数従属を取り除くことの必要性。

あるテーブルの中で推移的関数従属が残っていると、間違った登録が可能。(会社コードと会社名)
また、主キーが不明の段階で登録できない。

キー| メンバー名 | 会社コード  | 会社名
1  | 太郎     | 0000   | AAA
2  | 次郎     | 0001   | AAA

テーブルの関連

1対1、1対多、多対多があるが、通常1対多のみ使う。

多対多となる場合、関連実体というテーブルを作る。ただ、通常の業務要件では、
マスタとマスタを直接関連付けることはないので、普通に考えると多対多とはならない。

Ubuntu Java Tomcatインストール

インストール

sudo apt-get install defaut-jdk
java -version
今回は、1.8.0_121

sudo apt-get install tomcat7

sudo update-alternatives –list java
でJavaのパスを確認。

今回は、
/usr/lib/jvm/java-8-openjdk-i386/jre/bin/java
と表示される。

~/.profile
に以下を追記する。
JAVA_HOME=”/usr/lib/jvm/java-8-openjdk-i386/jre/bin/java”
PATH=”$JAVA_HOME/bin:$PATH”
CATALINA_HOME=”/usr/share/tomcat7″

profileの記述で違う方法として、
/etc/profile.d/java.sh
を作成し、
JAVA_HOME=”/usr/lib/jvm/java-8-openjdk-i386/jre/bin/java”
と追記し、
source ./java.sh
を実行する方法もある。今回はやらない。

ここで再起動。

echo $JAVA_HOME
で確認すると、
/usr/lib/jvm/java-8-openjdk-i386/jre/bin/java
と表示される。

ファイアーウォールの設定
sudo ufw allow 8080/tcp

ここまで来たら、
sudo /etc/init.d/tomcat7 restart
を実行。
http://192.168.102.15:8080/
にアクセス。

その他

設定ファイルの場所
sudo vim /etc/tomcat7/server.xml

Tomcatの状況確認
sudo /etc/init.d/tomcat7 status

もしeclipseでTomcatを操作する場合

http://www.eclipsetotale.com/tomcatPlugin.html#A3
から
tomcatPluginV331.zip
を保存し解凍して、
C:\eclipse\plugins
の中へ

C# Interpreter

C# デザインパターン Command

ざっくりまとめると、commandにreceiverを渡す。(commandがreceiverを保持)
渡し方は、Command cmd = new ConcreateCommand(receiver)
あるいは、上記のようなSetReceiver(receiver)とか。
そして、commandのExecute()の中でreceiverのAction()を呼ぶ。
Invokerは呼び出しで、そこからcommandのExecute()を呼ぶ。
処理の実体はreceiverのAction()の中。

C# Proxy

C# Flyweight

C# State

C# Memento