2016-05-31 4 views
1

SQLクエリとコードを整理する最良の方法を決定しようとしています。ゴラン私のコードからSQLクエリを守るにはどうしたらよいですか?

私のmodels/フォルダは、自分のテーブルにすべて自分の.goファイル内にあり、データベーステーブルと一致する構造体を含んでいます。

私は自分のコードを混乱させてしまっていますが、とりわけトランザクションとは関係なく、大量のsqlQueriesを投げ込んでしまいました。

どのようにしてコードをSQLクエリで処理するのですか。

+0

https://github.com/mattermost/platformここで行っているように店舗とモデルとして分けてください。 – khrm

+0

ストアドプロシージャの使用はどうですか?インラインSQLは、一般的にはコードの明快さの理由だけでなく、 'fm.Sprintf'のようなものを使用してクエリ文字列を作成するときにSQLインジェクションから身を守らないので、非常に悪い習慣とみなされます。また、sqlパッケージで 'Prepare'をチェックすると、あなたが望むだけ再利用できる' * Stmt'が返されます。 – evanmcdonnal

+1

https://github.com/nleof/goyesql:ファイルを解析し、S​​QLクエリをマップに関連付けることができます。コードロジックからSQLを分離するのに便利です。 – molivier

答えて

1

あなたはdata mapper patternようなものを実装することができます(私はこれを達成するためにORMを使用する必要はありません)。 EAAカタログから

例:ゴーで

enter image description here

モデル/ person.go

type Person struct { 
    Lastname string 
    Firstname string 
    Dependents int 
} 

マッパー/ person.go

package mapper 

import m "whatever/model" 

type PersonMap struct { } 

func (m *PersonMap) Insert(p *m.Person) error { 
    // SQL query 
    return nil 
} 

func (m *PersonMap) Update(p *m.Person) error { 
    // SQL query 
    return nil 
} 

func (m *PersonMap) Delete(p *m.Person) error { 
    // SQL query 
    return nil 
} 

しかし、その解決策はソリューションの一部にすぎません。 DBトランザクションに関しては、別の「レイヤー」から管理する必要があると思います。

関連する問題