4.4 KiB
4.4 KiB
工厂工具文档
概述
工厂工具提供了从配置直接创建已初始化的客户端对象的功能,避免调用方重复实现创建逻辑。
功能特性
- 从配置直接创建已初始化的客户端对象
- 统一的工厂接口
- 避免调用方重复实现创建逻辑
使用方法
1. 创建工厂实例
import (
"git.toowon.com/jimmy/go-commom/config"
"git.toowon.com/jimmy/go-commom/factory"
)
// 加载配置
cfg, err := config.LoadFromFile("./config.json")
if err != nil {
log.Fatal(err)
}
// 创建工厂实例
fac := factory.NewFactory(cfg)
2. 获取邮件客户端(已初始化)
// 直接获取已初始化的邮件客户端
emailClient, err := fac.GetEmailClient()
if err != nil {
log.Fatal(err)
}
// 直接使用,无需再创建
err = emailClient.SendSimple(
[]string{"recipient@example.com"},
"主题",
"正文",
)
3. 获取短信客户端(已初始化)
// 直接获取已初始化的短信客户端
smsClient, err := fac.GetSMSClient()
if err != nil {
log.Fatal(err)
}
// 直接使用,无需再创建
resp, err := smsClient.SendSimple(
[]string{"13800138000"},
map[string]string{"code": "123456"},
)
4. 完整示例
package main
import (
"log"
"git.toowon.com/jimmy/go-commom/config"
"git.toowon.com/jimmy/go-commom/factory"
)
func main() {
// 加载配置
cfg, err := config.LoadFromFile("./config.json")
if err != nil {
log.Fatal(err)
}
// 创建工厂
fac := factory.NewFactory(cfg)
// 获取邮件客户端(已初始化,可直接使用)
emailClient, err := fac.GetEmailClient()
if err != nil {
log.Printf("Email client not available: %v", err)
} else {
// 直接使用
err = emailClient.SendSimple(
[]string{"recipient@example.com"},
"测试邮件",
"这是测试内容",
)
if err != nil {
log.Printf("Failed to send email: %v", err)
}
}
// 获取短信客户端(已初始化,可直接使用)
smsClient, err := fac.GetSMSClient()
if err != nil {
log.Printf("SMS client not available: %v", err)
} else {
// 直接使用
resp, err := smsClient.SendSimple(
[]string{"13800138000"},
map[string]string{"code": "123456"},
)
if err != nil {
log.Printf("Failed to send SMS: %v", err)
} else {
log.Printf("SMS sent: %s", resp.RequestID)
}
}
// 如果需要访问配置对象
cfgObj := fac.GetConfig()
dsn, _ := cfgObj.GetDatabaseDSN()
log.Printf("Database DSN: %s", dsn)
}
API 参考
NewFactory(cfg *config.Config) *Factory
创建工厂实例。
参数:
cfg: 配置对象
返回: 工厂实例
(f *Factory) GetEmailClient() (*email.Email, error)
获取邮件客户端(已初始化)。
返回: 已初始化的邮件客户端对象和错误信息
说明: 如果邮件配置为nil,返回错误。
(f *Factory) GetSMSClient() (*sms.SMS, error)
获取短信客户端(已初始化)。
返回: 已初始化的短信客户端对象和错误信息
说明: 如果短信配置为nil,返回错误。
(f *Factory) GetConfig() *config.Config
获取配置对象。
返回: 配置对象
优势
之前的方式(需要调用方实现)
// 调用方需要自己实现创建逻辑
cfg, _ := config.LoadFromFile("./config.json")
emailConfig := cfg.GetEmail()
if emailConfig == nil {
log.Fatal("email config is nil")
}
emailClient, err := email.NewEmail(emailConfig)
if err != nil {
log.Fatal(err)
}
// 才能使用
emailClient.SendSimple(...)
使用工厂方式(直接获取已初始化对象)
// 直接获取已初始化的对象,无需重复实现
cfg, _ := config.LoadFromFile("./config.json")
fac := factory.NewFactory(cfg)
emailClient, err := fac.GetEmailClient()
if err != nil {
log.Fatal(err)
}
// 直接使用
emailClient.SendSimple(...)
注意事项
- 配置检查:工厂方法会自动检查配置是否存在,如果配置为nil会返回错误
- 错误处理:所有Get方法都可能返回错误,需要正确处理
- 配置对象:可以通过
GetConfig()方法访问原始配置对象,获取其他配置信息
示例
完整示例请参考 examples/factory_example.go