DDD

DDD(Domain-Driven Design) を勉強しています。
解決すべき問題をドメインとして捉え、
それをドメイン固有のルールなどと共にプログラムに表現していく手法です。

DDDではEntityやValue Objectなどの概念が出てきます。
C#でValue Objectを表現しようとした場合、classかstructか悩みました。
結局classで表現することに決めたのですが、
structはデフォルトコンストラクタを定義できない事が最大の理由です。
例えば正の整数を保証する為に、以下のような事ができれば、
structの利用の幅が広がるのですが実際にはできません。

struct MyStruct {
private readonly int _value;
MyStruct() { //このコンストラクタは定義できない。
throw new Exception();
}
MyStruct(int value) {
if (value <= 0) throw new ArgumentException("0以下の値は設定できません。");
_value = value;
}
…(略)…
}

Value Objectをclassで表現した場合、
中身の値は保証できても、使う側はオブジェクト自体のnullチェックが必要となります。
structの使いどころって、なかなかな無いものです。

VPN接続

先月から常にテレワークになったので、社内プライベートネットワークにVPN接続できるようにしました。

今までは必要なときだけ社内PCにTeamViewerでつないでいましたが、VPNのほうが何でもできて便利ですね。

今までVPNをよく分かっていなかったのでVPN接続出来るようにしてなかったのですが、もっと早くから使っておけば良かったと思ったのと、自分のよく分かっていない技術について知ろうとしなかったことを技術者として情けなく思いました。