Skip to content

Commit 0625d6b

Browse files
committed
fix: Fix requested changes
1 parent 3249c89 commit 0625d6b

File tree

1 file changed

+31
-11
lines changed

1 file changed

+31
-11
lines changed

content/chapter 9/creational patterns/9.1.6-builder.md

Lines changed: 31 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
---
2-
title: '9.1.6 الگو Builder'
2+
title: 9.1.6 الگو Builder
33
slug: go-builder-pattern
44
weight: 172006
5+
mermaid: "true"
56
---
67

7-
### توضیحات
8+
## 9.1.6.1 توضیحات
89

910
در دنیای طراحی نرم‌افزار، یکی از چالش‌های رایج، **ساخت{{< tooltip text="اشیاء" note="Objects" >}} پیچیده با پارامترهای متعدد و متنوع** است. فرض کنید قصد دارید یک شیء پیکربندی برای اتصال به {{< tooltip text="پایگاه داده" note="Database" >}} بسازید. بسته به نوع پایگاه داده ای که می خواهید (MySQL، PostgreSQL، SQLite و …)، ممکن است به مجموعه‌ای متفاوت از پارامترها نیاز داشته باشید: نام کاربری و گذرواژه، میزبان و پورت، نام پایگاه داده یا حتی مسیر فایل. اگر بخواهیم همه‌ی این موارد را با یک {{< tooltip text="سازنده" note="Constructor" >}} ساده مدیریت کنیم، به زودی با توابعی پر از پارامترهای اختیاری و ترتیب‌های گیج‌کننده مواجه خواهیم شد.
1011

@@ -14,15 +15,35 @@ weight: 172006
1415
الگوی بیلدر وقتی کمک کننده است که بخواهید یک شیء پیچیده با پارامترهای زیاد را مرحله به مرحله و خواناتر بسازید، بدون اینکه درگیر سازنده‌های طولانی و گیج‌کننده بشوید.
1516
{{< /hint >}}
1617

17-
### دیاگرام
18-
19-
{{< uml url="<https://mermaidchart.com/play?utm_source=mermaid_live_editor&utm_medium=share#pako:eNp9U02PmzAQ_SuW98JKNE0I2QQf9hDYVS-NVqp6qbg4eEKsgk0He_sR5b_XNhClq2Y5WB77zXvPw8yJVloAZbSHHxZUBYXkNfK2VIRwa7Sy7R4wRJXRSPJGgjI-7jgaWcmOK0O2VjYCkPCelLTYjmFJ3-JyrQ6ynmBD5FEet9MGiH6FSSOeSO-K5VOaF4zkRy4V3zdAejAGsPdpA_jD4-MIZ2QHPy8WIoHSUd7_H_kFzCfdm-joltuQF40m6txyG_K1d1K2f0-o2O54C5HY34Y8ywZeuDlGnVvu31ZlRMZjDe-e86esWLHhnLzyRgpuoCdSddbcKE3YRMHBeHZ9O3GQoWgEbeP4wrs-ir1y9onrgINzORp8n8WXjCBXNQxP4Y2ZLqVWvWuMPti8ZhkexwiCsahIFUKLIMilXULG5WlTgjM5okkEs3oW-0hBNfw0aNz1tfaBy-Zfbc8VSC_igKhD54MSpaIxrVEKygxaiGkL2HIf0pOHlNQcoYWSMrcVHL_7rj67HNf237RupzTUtj5SduDOUExt5ws1TtzlFJ0eYK6tMpQlSeCg7ER_uWiTztbJYvOQrLMke9isVzH9TdkymyWr-XyxSNN0ni0255j-CaLzmYPM3Zcs11m2SNdpTEFIN8ifh6kPw3_-CwjCWZE>" >}}
20-
21-
### نمونه کد: ساخت پیکربندی پایگاه داده با Builder
18+
## 9.1.6.2 دیاگرام
19+
20+
{{< mermaid >}}
21+
sequenceDiagram
22+
autonumber
23+
actor Client
24+
participant Builder as DBBuilder
25+
participant Config as DBConfig
26+
Note over Client,Builder #D3E4CD: Chainable setters
27+
Client->>Builder: NewDBBuilder(driver)
28+
Client->>Builder: SetHost(host)
29+
Client->>Builder: SetPort(port)
30+
Client->>Builder: SetUser(user) / SetDBName(db) / SetFilePath(path)
31+
Note over Builder,Config #FCE9D5: Build validates inputs
32+
Client->>Builder: Build()
33+
Builder->>Builder: validate driver rules (user/dbname or filepath)
34+
Builder->>Builder: validate port range
35+
alt validations pass
36+
Builder->>Config: return configured DBConfig
37+
Client->>Config: use config (e.g., connect)
38+
else validations fail
39+
Builder-->>Client: return error
40+
end
41+
{{< /mermaid >}}
42+
43+
## 9.1.6.3 مثال
2244

2345
وقتش رسیده که یک نمونه‌ی واقعی را ببینیم. در کدی که در ادامه می‌آید، ما یک ساختار `DBConfig` داریم که تنظیمات اتصال به پایگاه داده را نگه می‌دارد. یک **Builder** به نام `DBBuilder` ایجاد کرده‌ایم که به ما اجازه می‌دهد با استفاده از متدهای زنجیره‌ای (`SetUser`, `SetHost`, …) تنها فیلدهای مورد نیاز خود را مقداردهی کنیم و در پایان با فراخوانی `Build()` شیء نهایی را تحویل بگیریم.
2446

25-
<!-- markdownlint-disable MD010 MD037 MD012 -->
2647
{{< play >}}
2748
package main
2849

@@ -148,7 +169,6 @@ func main() {
148169
}
149170

150171
{{< /play >}}
151-
<!-- markdownlint-enable MD010 MD037 MD012 -->
152172

153173
این کد، مفهوم الگوی بیلدر را در Go به شکلی بسیار ساده و شفاف پیاده‌سازی کرده است.
154174
ساختار `DBConfig` شامل تمام فیلدهای لازم اتصال به پایگاه داده مثل نوع درایور، نام کاربری، رمز عبور، هاست، پورت، نام پایگاه داده، مسیر فایل (برای SQLite) و SSLMode است. `DBBuilder` یک سازنده مرحله‌ای است که این فیلدها را به صورت زنجیروار مقداردهی می‌کند.
@@ -157,15 +177,15 @@ func main() {
157177

158178
در تابع `main` دو مثال واقعی وجود دارد: یکی برای MySQL که تمام فیلدهای مرتبط پر شده و دیگری برای SQLite که تنها مسیر فایل مشخص شده است. این روش باعث می‌شود کد خوانا، قابل گسترش و ایمن باشد و ساخت پیکربندی‌های مختلف پایگاه داده ساده و منعطف انجام شود. این پیاده‌سازی در عین سادگی نشان می‌دهد که چگونه می‌توان با استفاده از الگوی Builder از پیچیدگی‌های ایجاد اشیای بزرگ و متنوع کاست.
159179

160-
### کاربرد ها
180+
## 9.1.6.4 کاربرد ها
161181

162182
در مواردی که اشیاء ما پارامترهای زیادی دارند و پیچیده هستند، استفاده از الگوی سازنده به کمک ما می‌آید. در مواردی مثل:
163183

164184
1. کانکشن های دیتابیس
165185
2. فرم یا UI‌های پیچیده
166186
3. {{< tooltip text="لاگر" note="Logger" >}}
167187

168-
### چه زمانی نباید از الگوی Builder استفاده کنیم؟
188+
### 9.1.6.4.1 چه زمانی نباید از الگوی Builder استفاده کنیم؟
169189

170190
1. **ساخت اشیاء ساده**
171191

0 commit comments

Comments
 (0)