什麼是建模模型(用戶)和數據庫而不運行到循環依賴關係的最佳方式?在Go應用程序中實現SOLID設計
我有一個Go應用程序,我試圖設置。進口結構令人困惑,因爲它似乎並沒有將問題區分開來。我想有一個數據庫商店,需要訪問模型的名稱來遷移它們。讓模型自我遷移似乎很奇怪,這似乎與模型無關。同時,我希望每個模型的驗證都需要導入數據庫存儲。讓商店驗證單個模型似乎更奇怪。然而,這會產生循環依賴。
結構:
models
- user.go
config
- store.go
store.go
...
// CreateDb - creates table
func (i *Store) CreateDb() {
...
i.DB.AutoMigrate(&models.User{})
...
}
...
user.go
package models
type User struct {
Email string
}
func (u *User) ValidateUser() (err []error) {
messages := make([]error, 0)
// Uniqueness Validations
email := ""
email = config.Database.DB.Where("email LIKE ?", u.Email).First(&User)
if email != "" {
messages = append(messages, errors.New("Email has to be unique"))
}
return messages
}
我試圖將它們放入第三包,但失敗了,因爲它們都需要相同的依賴 - 商店。我也嘗試將它們全部放入我認爲可行的同一個軟件包中,但這似乎破壞了所有結構和問題。
建議?
我的解決辦法
我結束了數據庫指針去耦到一個單獨的包,然後取得的遷移的自舉過程的一部分。然而,我保持驗證符合模型包。