Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ドメインロジックと 永続化処理を分離する設計改善 を行って得られた知見 / Design improvements that separate domain logic and persistence function

ぷらす
September 20, 2019

ドメインロジックと 永続化処理を分離する設計改善 を行って得られた知見 / Design improvements that separate domain logic and persistence function

Akatsuki Summer Internship 2019の成果発表会のスライドです。

ブログ↓
ドメインロジックと永続化処理を分離する設計改善を行って得られた知見【アカツキ インターン】
https://blog.p1ass.com/posts/aktsk-intern/

ぷらす

September 20, 2019
Tweet

More Decks by ぷらす

Other Decks in Programming

Transcript

  1. 8IPBN* • ؛ ௚ً • 5XJUUFS (JU)VC!QBTT • ژ౎େֶ #

    • αʔόʔαΠυ (P • $".1)03 ӡӦϝϯόʔ ࣗݾ঺հ
  2. "HFOEB • ࣗݾ঺հ • Ծ૝௨՟؅ཧαʔϏεͷ঺հ • ઃܭվળΛߦ͏ܦҢ • ݱঢ়ͷ՝୊ •

    ઃܭվળ • ઃܭվળͰಘΒΕͨϝϦοτ • ݸਓతͳֶͼ • ͓ΘΓʹ
  3. ֓ཁ • ήʔϜ಺௨՟؅ཧαʔϏε • ՝ۚΞΠςϜͷ؅ཧ • Ϣʔβͷ࢒ߴ؅ཧ • Ϩγʔτݕূ •

    FUD Ծ૝௨՟؅ཧαʔϏεͷ঺հ ήʔϜ։ൃऀͷ޻਺࡟ݮʹد༩
  4. ࢖ΘΕ͍ͯΔٕज़ελοΫ • (P • (PPHMF"QQ&OHJOF ("& • EBUBTUPSF • $JSDMF$*

    Ծ૝௨՟؅ཧαʔϏεͷ঺հ (PQIFSJ[FNF IUUQTHPQIFSJ[FNF
  5. ີ݁߹ͳυϝΠϯ૚ ϩδοΫͱEBUBTUPSF΁ͷӬଓԽॲཧ͕ࠞ͟Γ߹ͬͯෳࡶ ݱঢ়ͷ՝୊ Is the change list more complex than

    it should be? "Too complex" usually means "can't be understood quickly by code readers." (PPHMFT&OHJOFFSJOH1SBDUJDFTEPDVNFOUBUJPOIUUQTHPPHMFHJUIVCJPFOHQSBDUJDFT
  6. ςελϏϦςΟͷ޲্ ϞοΫΛ࢖͏͜ͱͰςετ͕ॻ͖΍͘͢ ઃܭվળͰಘΒΕͨϝϦοτ { name: "return error when post failed",

    hoge: &types.Hoge{ HogeID: "invalid” }, injector: func(r *mocks.MockHogeRepository) *mocks.MockHogeRepository { r.EXPECT().Post(gomock.Any(), types.Hoge{HogeID: "invalid"}). Return(nil, errors.New("some error")) return r }, want: nil, wantErr: true, } // ... for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() mockRepo := mocks.NewMockHogeRepository(ctrl) mockRepo = tt.injector(mockRepo) // ... } }