Это может быть непопулярный ответ, но я не использую ko.mapping
для перевода моих C # POCO в JS viewmodels. На самом деле две причины.
Первое - это отсутствие контроля. ko.mapping превратит все в наблюдаемое, если вы позволите. Это может привести к большим накладным расходам для полей, которые просто не должны быть наблюдаемыми.
Вторая причина связана с расширяемостью. Конечно, ko.mapping может перевести мой C # POCOS в объекты JS с наблюдаемыми свойствами. Это нормально до тех пор, пока вам не понадобится метод JS, который в какой-то момент вы всегда будете иметь.
В предыдущем проекте я фактически добавлял дополнительные методы к объектам ko.mapped программным способом. В этот момент я спросил, действительно ли ko.mapping создает больше проблем, чем решает.
Я принимаю к сведению ваши проблемы с СУХОЙ, но в любом случае у меня есть разные доменные версии моих POCO. Например, объект MyProject.Users.User
, обслуживаемый UserController, может сильно отличаться от MyProject.Articles.User
. Пользователь в пространстве имен Users может содержать множество вещей, связанных с администрированием пользователей. Объект User в пространстве имен Articles может быть простым поиском, указывающим на автора статьи. Я не рассматриваю этот подход как нарушение принципа СУХОЙ; скорее средство взглянуть на одну и ту же концепцию двумя разными способами.
Это более предварительная работа, но это означает, что у меня есть специфичные для проблемы представления пользователя, которые не загрязняют реализации друг друга.
Так же и с моделями представления Javascript. Они не C # POCO. Это конкретный подход к концепции, подходящей для конкретной цели; хранение и работа с данными на стороне клиента. В то время как ko.mapping
первоначально даст вам то, что кажется повышением производительности, я думаю, что лучше создавать вручную конкретные модели представлений, разработанные для клиента.
Кстати, я использую ту же стратегию MVC3 / KnockoutJS, что и вы.