Skip to content

Instantly share code, notes, and snippets.

以下あくまで私見として捉えてください。僕もDDDを勉強中で解釈が間違っていたりとか異なる意見があると思いますので。 あと書きなぐっているので読みづらくてすみません、あとで余裕があれば改めてブログにでもまとめます。

それで、僕の理解だとリポジトリって対象の集約ごとに提供するメソッドが多少ばらつくんですよね。 例えば書き込みをサポートしないリポジトリとか、IDを複数渡して一度に取ってこれるリポジトリ、そうじゃないリポジトリとか。 やりがちな失敗が、最初にスタンダードなread/writeができるリポジトリを定義してすべてのリポジトリでそれを継承しようとしてしまうことです。 これだとReadしかできないリポジトリが発生したとき、それだけリポジトリ基底クラスを継承しないようにするかReadWriteRepositoryの既定クラスとしてReadRepositoryを置くなどしないといけなくなります。 最悪の選択はReadしか不要なのにWriteのメソッドも実装してしまうことで、これは余計なコードが増えるだけではなく他の開発者が「このリポジトリってwriteしていいんだ」と勘違いする理由になります。

より本質的にアンチパターンであるとした場合の理由を考えると リスコフの置換原則「派生型はその基本型と置換可能でなければならない」に反しているからだと思います。

@mizchi
mizchi / predict-frontend.md
Last active May 12, 2023 03:43
React のユーザーから見た今後のフロントエンドの予想

この記事は議論のたたき台で、ポジショントークや、偏見にまみれています。

今のフロントエンドの分類

  • 古典的なサーバーサイド WAF への +α の味付け
  • 大規模なクライアントアプリケーション管理のための SPA
  • SEO / SSR を考慮した Node ヘヴィーな環境

他、提唱されてるパターン

@nakamura-to
nakamura-to / AppConfig.java
Last active August 14, 2020 01:27
RedshiftのUNLOADコマンドをDomaで生成する案
package sample;
public class AppConfig implements Config {
@Override
public QueryImplementors getQueryImplementors() {
return new QueryImplementors() {
@Override
public SqlFileSelectQuery createSqlFileSelectQuery(Method method) {
if (method.isAnnotationPresent(Unload.class)) {
@orekyuu
orekyuu / Main.java
Created September 24, 2016 12:28
FizzBuzz
import javax.xml.bind.DatatypeConverter;
import java.lang.reflect.Method;
class Main {
public static void main(String[] args) {
ClassLoader classLoader = new ClassLoader() {
private static final String src = "CAFEBABE0000003100270A0009001609001700180800190A001A001B08001C08001D0A001A001E07001907001F0100063C696E69743E010003282956010004436F646501000F4C696E654E756D6265725461626C650100124C6F63616C5661726961626C655461626C650100047468697301000A4C46697A7A42757A7A3B01000866697A7A42757A7A010001690100014901000A536F7572636546696C6501000D46697A7A42757A7A2E6A6176610C000A000B0700200C0021002201000846697A7A42757A7A0700230C0024002501000446697A7A01000442757A7A0C002400260100106A6176612F6C616E672F4F626A6563740100106A6176612F6C616E672F53797374656D0100036F75740100154C6A6176612F696F2F5072696E7453747265616D3B0100136A6176612F696F2F5072696E7453747265616D0100077072696E746C6E010015284C6A6176612F6C616E672F537472696E673B2956010004284929560021000800090000000000020001000A000B0001000C0000002F00010001000000052AB70001B1
@vkhatri
vkhatri / handler-ntpd-restart.sh
Created January 2, 2016 02:15
consul event ntpd service restart
response=$(cat -)
payload=$(echo $response | sed -e 's/^.*"Payload":"\([^"]*\)".*$/\1/')
# action string "runme" == byte "cnVubWU=" , replace "runme" with your payload data
if [ "$payload" == "cnVubWU=" ]; then
logger restarting ntpd, consul triggered by payload $payload
# /usr/bin/sudo /sbin/service ntpd restart
else
logger skipping ntpd restart, consul triggered by payload $payload
fi
@udzura
udzura / consul-workshop.md
Last active November 7, 2021 12:17
やわらか Consul

やわらか Consul

こわくないConsul

Setup

事前に、ワークショップ用のサンプルプロジェクトをチェックアウトし、VMの作成だけしておきましょう。 --no-provision でお願いします!

@gakuzzzz
gakuzzzz / 1_.md
Last active August 2, 2023 01:59
Scala の省略ルール早覚え

Scala の省略ルール早覚え

このルールさえ押さえておけば、読んでいるコードが省略記法を使っていてもほぼ読めるようになります。

メソッド定義

def concatAsString(a: Int, b: Int): String = {
  val a_ = a.toString();
  val b_ = b.toString();