19回大会前に書いてたコードの解説
ファイル構造
shift_making_man
- Proglam.cs
- DataAccessFacade.cs
Controllers
shiftService
- ShiftCreationService.cs
- ShiftModificationService.cs
- ShiftOptimizationService.cs
- ShiftSchedulerController.cs
- ShiftValidationService.cs
- AuthController.cs
Data
Implementations
- AdminDataAccess.cs
- AttendanceDataAccess.cs
- ShiftDataAccess.cs
- ShiftRequestDataAccess.cs
- StaffDataAccess.cs
- StoreDataAccess.cs
Interfaces
- IAdminDataAccess.cs
- IAttendanceDataAccess.cs
- IShiftDataAccess.cs
- IShiftRequestDataAccess.cs
- IStaffDataAccess.cs
- IStoreDataAccess.cs
Models
- Admin.cs
- Attendance.cs
- Shift.cs
- ShiftRequest.cs
- Staff.cs
- Store.cs
Views
- DashboardForm.cs
- LoginForm.cs
- MainForm.cs
- ShiftListForm.cs
- ShiftSchedulerForm.cs
見ての通り構造化しまくって将来的な拡張性を重視した設計をした。というか、やりすぎ。
設計の方針
-
コードの保守の面からセキュリティ気にしたらこうなっちゃった 保守の面から考えて、コードの役割分担するだけでエラーを追っかけやすくなるしどこが問題起こしてるか分かりやすいですよって言えばセキュリティの問題が発生した際の対応がやりやすいって言えると思った。大会本番に提示された資料として管理者からのヒアリングが追加されててそこに「個人情報扱うしセキュリティとか気にしてほしいな(要約)」っていうのも記載されてたのでMVC狂信者になって売り込み文句を書いてた。変更点が全体に響くわけではないので心臓にやさしいって言いたかった。ユニットテストはできるよ…ほんとだよ…
-
将来的に機能拡張を想定してコードの拡張性を与えたかった 将来的に店舗の拡張や従業員の増加などに備えて変更する部分を最小限に、追加する際に動いてるコードに悪さしないように責任分担させれば安心安全に機能追加できるし、変更点も最小限に抑えられるからリリース早くなるぜって言ったらいいよってマーケティングの本に書いてあったからパクった
-
コードの可読性をあげたかった コードの可読性あげればさぁ…コード読みやすいじゃんかって思ったんですよ。機能追加がホイホイ行われるだろうし下手に1つにまとめて難読化するよりも構造化して読みやすくしてあげた方が優しいじゃないですかって思ったんですよ
方針通りに実装した結果がこれだよ!!!
徹底した機能別のクラス設計
なんかファイル名やらフォルダ名から察せる通り、命がけのMVC設計してます。そんな大規模システムじゃねえのに何してんだろう…一応ファイル名とフォルダ名からどういう機能が実装されてるか分かりやすくしたり、機能ごとに分けておくことで管理・デバッグ・機能追加・引継ぎで楽なことしかないので理にかなってます本当です
徹底した機能別設計によってデータの安全性もついでに保証
下手にクエリを直書きしてないので事故が起きないようにしてある。そのためにコントローラークラスあるようなもの。
データベースにアクセスするのにどんな手順通ってるの?
データベースにアクセスしてデータ持ってくるのに手順を踏んでいるのでそれの解説
1.依存性の注入
使いたいテーブルに合わせてインターフェースをコンストラクタでコントローラーに注入する。 インターフェースは「I(テーブル名)DataAccess.cs」っていうファイル名になってるやつ。
ここでいう「インターフェース」はモデルとクラスを中継するためのものです。