Zajmuję się tworzeniem aplikacji, w której potrzebuję jakiejś abstrakcji.Abonowanie klasy za pomocą mangusty
Chodzi mi o to, że chciałbym "symulować" zachowanie w interfejsie, takie jak tworzenie umowy wewnątrz moich konkretnych zajęć.
Właściwie kontaktach z użytkownikami, mam klasę UserMongoRepository z umową projekt:
- GETALL() zwraca pełną listę użytkowników przez obietnicę
- getById (ID) zwraca się do zainteresowanych użytkowników przez obietnicę
- save (użytkownik) oszczędza użytkownikowi przez obietnicę
- ... itp
mam ten sam mnie thods zaimplementowane wewnątrz UserMysqlRepository (pozwalając mi zmienić zachowanie, gdy zmiana jest potrzebna.
Problem
Moim problemem jest to, że mam do czynienia z Mangusta, które nie działają jak DataMapper, ale raczej aktywnego rekordu.
Oznacza to, że moja realizacja Save (użytkownik) byłoby to trochę dziwne jak następuje:
save(user){
let mongooseUser = this.convert(user);
return user.save();
}
Metoda konwersji pozwala mi przejść z standardowy model do konkretnego modelu Mongoose. To pozwala mi znowu mieć trochę abstrakcji i nie muszę przepisywać pełnego dostępu do danych aplikacji.
Moim prawdziwym problemem jest to, kiedy próbuję jednostki przetestować pełną klasę:
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();
}
}
w standardowy sposób, chciałbym wprowadzić mój DAO wewnątrz mojego konstruktora, a będąc w stanie go wyśmiewać.
W przypadku mangusty, jest to nieco niepokojące, ponieważ element, który sprawia, że zadanie nie jest instancyjnym obiektem (tak, że mogę go wyśmiać), ale definicja klasy jest importowana na górze dokumentu.
Solutions
powinienem zdać definicję klasy MongooseUser jako parametr wewnątrz konstruktora?
co oznacza, że będę miał ten kod wewnątrz metody konwersji:
let user = new this.MongooseUser({})
Jeżeli masz lepszy pomysł, aby abstrakcyjne zachowania mangusty w odwzorowujący dane sposób?
nie chcę użyć innego modułu, to, moim sensie, najbardziej zaawansowanej jednym z NodeJS ...
celu wyjaśnienia, że używasz mongoose prawo – CreasolDev
Na razie Używam go, tak – mfrachet
Muszę iść na bankomat, ale dam ci odpowiedź wkrótce;) – CreasolDev