Skip to content

Instantly share code, notes, and snippets.

View bigwheel's full-sized avatar

k.bigwheel (kazufumi nishida) bigwheel

View GitHub Profile
case class ErrorResponseBody private(
`type`: URI,
title: String
)
// https://doc.akka.io/docs/akka-http/10.1.3/routing-dsl/rejections.html?language=scala#customising-rejection-http-responses
private val rfc7807RejectionHandler = RejectionHandler.default.mapRejectionResponse {
case res @ HttpResponse(_, _, entity: HttpEntity.Strict, _) =>
val message = entity.data.utf8String
// アプリケーション層のどこか
def `ユーザーを有効状態で追加`(
`組織ID`: Int,
`ユーザー名`: String,
`メールアドレス`: String,
`ハッシュ化されたパスワード`: String): Try[`ユーザー`] = {
val `組織インスタンス` = `組織リポジトリ`.find(`組織ID`).get
if (`組織インスタンス`.`有効状態でユーザーを追加可能か`) {
val `ユーザーインスタンス` = `ユーザーファクトリ`.create(
// アプリケーション層のどこか
def `ユーザーを有効状態で追加`(
`組織ID`: Int,
`ユーザー名`: String,
`メールアドレス`: String,
`ハッシュ化されたパスワード`: String): Try[`ユーザー`] = {
val `組織インスタンス` = `組織リポジトリ`.find(`組織ID`).get
if (`組織インスタンス`.`有効状態でユーザーを追加可能か`) {
val `ユーザーインスタンス` = `ユーザーファクトリ`.create(

6.8.1 Package Names

Names of packages that are to be made widely available should be formed as described in §7.7. Such names are always qualified names whose first identifier consists of two or three lowercase letters that name an Internet domain, such as com, edu, gov, mil, net, org, or a two-letter ISO country code such as uk or jp. Here are examples of hypothetical unique names that might be formed under this convention:

com.JavaSoft.jag.Oak
org.npr.pledge.driver
uk.ac.city.rugby.game

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

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

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

$ jets new demo
Creating a new Jets project called demo.
create demo
create demo/.env.development
create demo/.env.test
create demo/.env
create demo/.gitignore
create demo/.jetskeep
create demo/.rspec
create demo/Gemfile
}
+ ip_set_descriptor {
+ type = "IPV4"
+ value = "34.225.159.203/32"
}
+ ip_set_descriptor {
+ type = "IPV4"
+ value = "34.225.248.221/32"
}
+ ip_set_descriptor {
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2
template:
{
"version":1,
"notes":"",
"documentation":"\"This file is a QMK Configurator export. You can import this at <https://config.qmk.fm>. It can also be used directly with QMK's source code.\n\nTo setup your QMK environment check out the tutorial: <https://docs.qmk.fm/#/newbs>\n\nYou can convert this file to a keymap.c using this command: `qmk json2c {keymap}`\n\nYou can compile this keymap using this command: `qmk compile {keymap}`\"\n",
"keyboard":"crkbd/rev1/common",
"keymap":"crkbd_rev1_common_layout_split_3x6_3_mine",
"layout":"LAYOUT_split_3x6_3",
"layers":[
[
"KC_TAB",