清洁建筑:Konsep Dasar

框架和驱动程序不应该决定我们如何构建应用程序逻辑。 相反,框架和驱动程序应按照应用程序逻辑的说明进行操作。

关键词

干净的代码,架构,干净的体系结构,依赖注入控制反转

问题

Seringkali ketika membuat aplikasi,kita terlalu memprioritaskan untuk menentukan framework di depan。 错误:menggunakan Laravel dengan数据库Postgres,aut Spring dengan数据库MySql。 Padahal ketika membuat aplikasi,框架hanyalah平台tempat aplikasi tersebut berjalan,法塔尼亚:

  • Web框架hanyalah metode untuk menerima请求单成员响应。
  • 数据库驱动程序hanyalah metode untuk menyimpan数据。 Sedangkan数据adalah属性dari aplikasi,bukan数据库。

Akibat dari menentukan框架di depan,tidak jarang kode aplikasi menjadi 紧耦合 ke框架/驱动程序yang dipakai。 Sehingga apabila diperlukan移植atau perubahan框架/驱动程序(misal karena ada kebutuhan performa atau 报废 )akan memakan waktu dan usaha yang banyak。

Bagaimana Seharusnya

Ketika membicarakan aplikasi( 业务规则 )maka logika aplikasi harus lebih penting daripada penentuan框架/驱动程序。 Sehingga keputusan mengenai框架/驱动程序yang digunakan dapat di-defer(tunda)di belakang。

Hal terpenting yang perlu diperhatikan adalah memisahkan antara logika bisnis aplikasi dengan框架yang menjadi platform dari aplikasi。 Misal:

  • Web框架Web框架请求框架响应。请求Web框架请求成员响应。
  • 数据库驱动程序tidak mempengaruhi数据yang disimpan aplikasi,hanya menulis数据yang diminta oleh aplikasi,dan memberi数据yang diminta oleh aplikasi。

Arsitektur yang mengakomodasi aturan tersebut selanjutnya dapat反对Clean Architecture karena kode aplikasi bersih dari kode-kode框架和驱动程序。

解耦:Gunakan图层

Secara Global,Arsitektur ini dapat dibagi menjadi 4 (tidak harus seperti ini):

  • 实体
  • 用例
  • 接口适配器
  • 框架和驱动

来源:8th Light

实体

Mendefinisikan 商业规则 yang dipakai bersama di keseluruhan aplikasi企业。 Bisa berupa对象dengan方法,atau struktur数据。 Misal:

  • Struktur数据User yang digunakan di seluruh aplikasi。
  • Kelas Date yang digunakan untuk melakukan Operasi terkait tanggal,yang digunakan di seluruh aplikasi。

Kode di layer ini jarang berubah,karena merupakan aturan yang ada di inti aplikasi企业。 Kalau berubah di sini,bisa jadi 层, di luarnya akan terkena阻尼aknya。 Tapi sebaliknya,perubahan di layer luarnya tidak boleh berdampak pada kode di layer ini。 企业规则企业原则:杨德凯·丹根·凯瑟鲁鲁汉·阿普里卡西企业。

用例

Mendefinisikan logika kasus spesifik penggunaan aplikasi dalam bentuk用例。 Misal:

  • 创建订单。 Khusus digunakan untuk membuat订单,di dalamnya ada aturan-aturan bagaimana订单dibuat。

行为用例aplikasi的Perubahan di layer ini akan terjadi apabila ada perubahan di。

接口适配器

Mengkomunikasikan antara框架/驱动程序dengan aplikasi,dan sebaliknya。 Kalau kita menggunakan框架Seperti Web MVC,又名Maka Letaknya Hanya Di Layer ini。 数据akan dikonversi menjadi bentuk yang dapat digunakan oleh aplikasi(用例/实体)。

  • Ketika menyimpan数据, ini berisi SQL命令和MySQL
  • Ketika Menampilkan Hasil Operasi / fungsi, layer ini berisi kode bagaimana data direpresentasikan dalam bentuk yang dapat dibaca。

框架和驱动

层ini berisi框架dan驱动程序,misal web框架dan数据库驱动程序。 Yang dilakukan di layer ini seharusnya cukup menyambungkan antara框架/驱动程序dengan layer-layer di dalamnya。 Misal:

  • Ketika menggunakan框架dengan依赖注入,maka di sini adalah服务containernya。
  • Untuk Web框架,di sini didefinisikan路由ke控制器yang dipakai。 Di mana控制器的通讯 di bawahnya(接口适配器)。

依赖规则

  • Arah依赖项harus dari luar ke dalam,contoh:框架ke接口适配器,atau接口适配器ke用例
  • 图层tidak harus sama seperti di gambar,tetapi aturan依赖tetap sama。

依赖倒置原则

Bagaimana jika输出业务规则 harus direpresntasikan sebagai aksi di halaman网站,错误的我渲染了halaman dengan参数数据tertentu? Bukankah hal ini menyebabkan业务规则规则取决于ke fungsi渲染halaman网站吗? 法律规定的依附规则

Untuk kasus semacam ini,cara mengatasinya bisa menggunakan 依赖性反转原理 ,ata biasa disebut juga 控制反转,控制级 karena 流量 dibuat berlawanan dengan arah依赖性。

资料来源:Slideshare

Prinsip 依赖反转

  • 依附
  • Jangan Depend Ke 具体课程
  • 运行时注入依赖项 :手动(di fungsi主/入口点),atau menggunakan 依赖项注入容器

凯辛普兰

  • Kode 商业规则 yang terlalu 紧密耦合的 ke框架/驱动程序akan mengalami kesulitan ketika ingin mengubah /移植框架/驱动程序yang digunakan。
  • Solusi untuk mengatasi紧密耦合antara框架dengan 业务规则 adalah dengan membagi menjadi beberapa sesuai dengan kompleksitas aplikasi,dan menerapkan 依赖规则 di mana kode 业务规则 berada di lapisan paling dalam pada aplikasi。
  • Dengan Demikian Akan Terbentuk arsitektur kode yang testable dan mudah di-substitusi komponen framework / driver-nya tanpa mengganggu 业务规则

词汇表

  • 第八光:鲍勃·马丁的干净建筑
  • 马丁·福勒(Martin Fowler):控制反转