私は抽象化を必要とするアプリケーションを開発しています。mongooseを使った抽象クラス
具体的なクラスの内部で契約を作成するなどのインターフェースの動作を「シミュレート」したいと思います。
実際には、ユーザーを扱う、私は実装契約にUserMongoRepositoryクラスを持っている:
- のgetAll()約束
- getById(ID)により、ユーザーの完全なリストは、ユーザー懸念を返しますなど
...約束
問題
私の問題は、私はより多くのアクティブなレコードのように、DataMapperのように行動していませんマングースを扱ってるということです。
それは保存(ユーザー)の私の実装は、以下のようなビット奇妙になることを意味します
save(user){
let mongooseUser = this.convert(user);
return user.save();
}
変換方法は、私は、特定のマングースモデルに標準モデルから切り替えることができます。これにより、私にも、抽象概念を持たせることができ、アプリケーションの全データアクセスを書き直す必要がなくなります。私は私の完全なクラスをテストユニットにしようとしたとき
私の本当の問題は、次のとおりです。標準的な方法で
import MongooseUser from '../../auth/mongooseModel/MongooseUser';
/**
* UserMongoRepositoryclass
*/
export default class UserMongoRepository{
/**
* Create an UserMongoRepository
*/
constructor(){
}
/**
* Convert a User to a MongooseUser
*/
convert(user){
return new MongooseUser({email:user.mail,password:user.password,firstname:user.firstName, lastname:user.lastName});
}
findById(id){
return MongooseUser.find({id:id});
}
save(user){
return user.save();
}
}
、私は私のコンストラクタの内部で私のDAOを注入し、それを模擬することができることでしょう。
mongooseの場合、ジョブを作成する要素はインスタンス化されたオブジェクトではなく(私はそれを嘲笑することができます)、ドキュメントの上部にインポートされたクラス定義なので、やや邪魔です。
ソリューション
私は、コンストラクタの内部パラメータとしてMongooseUserクラスの定義を渡すべきか?私は、変換方法の内、このコードを持っているだろうことを示唆している
:
let user = new this.MongooseUser({})
は、あなたがデータマッパーの方法で抽象マングースの行動に、より良いアイデアを持っていますか?
私はそれが、私の感覚では、NodeJSで最も先進的な一つだ、別のモジュールを使用したくない...
明確にするために、あなたはマングースの権利を使用している – CreasolDev
今のところ、別の方法として、あなただけの
MongooseUser
クラス(要件あなたがスタブされているファイルへの相対パスオーバーライドすることができます?私はそれを使用している、はい – mfrachet私はatmに行く必要がありますが、私はあなたにすぐに答えを与える;) – CreasolDev