Каковы критерии извлечения кода в методы mon goose? - PullRequest
0 голосов
/ 17 июня 2020

Допустим, у меня есть модель под названием User, которая не требует пояснений. В нашей модели есть поле под названием contacts, которое содержит список идентификаторов контактов. Теперь для добавления контакта можно использовать этот маршрут express:

router.post("/contacts/add", async (request, response) => {
    try {
        let user = await User.findOne({
            sessionSecret: request.body.claimedSessionSecret,
        });
        if (!user) {
            return response.json({ result: false, error: "An error occured." });
        }
        let contact = await User.findOne({ email: request.body.email });
        if (!contact) {
            return response.json({ result: false, error: "User not found." });
        }
        user.contacts.push(contact._id);
        await user.save();
        return response.json({ result: true });
    } catch (e) {
        debug(e);
        response.json({ result: false, error: "An error occured." });
    }
});

Другим вариантом будет извлечение сути этого маршрута в метод stati c нашей модели User, а затем используя это вместо этого. Вот так:

// in routes
router.post("/contacts/add", async (request, response) => {
    try {
        const isContactAdded = await User.addContact(userID, contactID);
        return response.json({ result: true });
    } catch (e) {
        debug(e);
        response.json({ result: false, error: "An error occured." });
    }
)};

// in model
UserSchema.statics.addContact = async function(userID, contactID) {
...
};

Теперь вопрос в том, какой подход является лучшим дизайном кода и почему?

  • Должен ли я извлечь его в метод пользователя только потому, что я изменяю данные или это должно произойти только в том случае, если операторов слишком много?
  • Поскольку мы можем использовать такие функции, как save() и findOne(), только после создания экземпляра модели, не следует ли нам обновлять БД так же, как я сделал выше (первый подход)? Потому что в противном случае у нас было бы много static методов в нашей модели.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...