Skip to content

Instantly share code, notes, and snippets.

k.bigwheel bigwheel

Block or report user

Report or block bigwheel

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile

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

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

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


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:

View dddscala2.scala
// アプリケーション層のどこか
def `ユーザーを有効状態で追加`(
`組織ID`: Int,
`ユーザー名`: String,
`メールアドレス`: String,
`ハッシュ化されたパスワード`: String): Try[`ユーザー`] = {
val `組織インスタンス` = `組織リポジトリ`.find(`組織ID`).get
if (`組織インスタンス`.`有効状態でユーザーを追加可能か`) {
val `ユーザーインスタンス` = `ユーザーファクトリ`.create(
View dddcode.scala
// アプリケーション層のどこか
def `ユーザーを有効状態で追加`(
`組織ID`: Int,
`ユーザー名`: String,
`メールアドレス`: String,
`ハッシュ化されたパスワード`: String): Try[`ユーザー`] = {
val `組織インスタンス` = `組織リポジトリ`.find(`組織ID`).get
if (`組織インスタンス`.`有効状態でユーザーを追加可能か`) {
val `ユーザーインスタンス` = `ユーザーファクトリ`.create(
View rfc7807-error-handling.scala
case class ErrorResponseBody private(
`type`: URI,
title: String
private val rfc7807RejectionHandler = RejectionHandler.default.mapRejectionResponse {
case res @ HttpResponse(_, _, entity: HttpEntity.Strict, _) =>
val message =
View packer-template.json
"builders": [
"type": "amazon-ebs",
"ssh_pty": "true",
"region": "ap-northeast-1",
"source_ami_filter": {
"filters": {
"architecture": "x86_64",
"name": "amzn-ami-hvm-*.0.20*-ebs,amzn-ami-hvm-*.1.20*-ebs,amzn-ami-hvm-*.2.20*-ebs,amzn-ami-hvm-*.3.20*-ebs,amzn-ami-hvm-*.4.20*-ebs,amzn-ami-hvm-*.5.20*-ebs,amzn-ami-hvm-*.6.20*-ebs,amzn-ami-hvm-*.7.20*-ebs,amzn-ami-hvm-*.8.20*-ebs,amzn-ami-hvm-*.9.20*-ebs",
View packer-build-log.log
% AWS_DEFAULT_PROFILE=dev-shared-provisioning-script-deployer ./
amazon-ebs output will be in this color.
==> amazon-ebs: Force Deregister flag found, skipping prevalidating AMI Name
==> amazon-ebs: No AMI was found matching filters: {
==> amazon-ebs: Filters: [
==> amazon-ebs: {
==> amazon-ebs: Name: "root-device-type",
==> amazon-ebs: Values: ["ebs"]
==> amazon-ebs: },
bigwheel /
Created Apr 27, 2016
#!/usr/bin/env bash
set -ex
View search-before-index-create-complete.txt
[error] RemoteTransportException: : [node03][inet[/]][indices:data/read/search] (
[error] org.elasticsearch.transport.netty.MessageChannelHandler.handleException(
[error] org.elasticsearch.transport.netty.MessageChannelHandler.handlerResponseError(
[error] org.elasticsearch.transport.netty.MessageChannelHandler.messageReceived(
[error] org.el
View Github milestone enhanced issue list.js
// ==UserScript==
// @name Github milestone enhanced issue list
// @namespace
// @version 1.0
// @description this is description
// @author bigwheel
// @match*
// @grant GM_xmlhttpRequest
// @require
// ==/UserScript==
You can’t perform that action at this time.