Путаница никогда не может действительно работать. Для любого, кто действительно хочет достигнуть Ваш код, это - просто удар скорости. Хуже, это мешает Вашим пользователям исправлять ошибки (и поставлять меры назад Вам), и делает его тяжелее для Вас для диагностирования проблем в поле. Это - пустая трата Вашего времени и денег.
Говорят с адвокатом о законе об интеллектуальной собственности и каковы Ваши легальные опции. "Открытый исходный код" не подразумевает, что "люди могут считать источник". Вместо этого Открытый исходный код является конкретным разрешения предоставления модели лицензирования, чтобы свободно использовать и изменить Ваш код. Если Вы не выдаете такую лицензию тогда, люди, копирующие Ваш код, находятся в нарушении, и (в большей части мира) у Вас есть легальные опции остановить их.
единственный способ, которым можно действительно защитить код, не состоит в том, чтобы поставить его. Переместите важную серверную сторону кода и имейте Ваш общедоступный код JavaScript, делают вызовы Ajax к нему.
Объяснение одним предложением:
MVVM - это переосмысление хорошо известного шаблона Model-View-Presenter (MVP), который особенно хорошо работает со средствами привязки данных, поставляемыми с WPF для разделения приложений. логика из дизайна пользовательского интерфейса.
Более подробное и полезное объяснение:
Основная концепция MVVM - это разделение приложения WPF на отдельные компоненты, каждый из которых несет одну ответственность в процессе получения информации на экране.
Во-первых, у вас есть модель. Это класс с очень ограниченной функциональностью, который обычно заполняется из какого-либо внешнего источника, такого как база данных или веб-сервис. Например:
public class MessageModel
{
public string Message { get; set; }
}
Вдобавок к этому вы накладываете ViewModel, это то место, где находится логика приложения, она уведомляет представление об изменениях в модели и обеспечивает согласованность данных. Благодаря реализации интерфейса INotifyPropertyChanged двусторонняя привязка данных между ViewModel и представлением предоставляется бесплатно WPF:
public class MessageViewModel : INotifyPropertyChanged
{
private MessageModel _model;
public string Message
{
get { return _model.Message; }
set
{
if (_model.Message != value)
{
_model.Message = value;
OnPropertyChanged("Message");
}
}
}
}
Наконец, у вас есть View. Это файл xaml, описывающий структуру элементов управления, используемых для отображения и редактирования данных в ViewModel:
<Canvas>
<TextBox Text={"Binding Message"} />
</Canvas>
Причина, по которой вы прилагаете все эти усилия, заключается в том, что модель очень легкая и легко передается через границы домена. Его просто отправить или получить из веб-службы или сопоставить с таблицей базы данных. ViewModel, с другой стороны, сложен, но имеет несколько зависимостей - ее не волнует, откуда модель получает данные, только то, что она есть, и у нее вообще нет концепции представления, что делает ее очень тестируемой ( логика вашего приложения не зависит от пользовательского интерфейса для тестирования). Наконец, xaml хорошо разделен и может быть передан дизайнеру, которому не нужно ничего знать о логике приложения, только то, что ViewModel будет представлять определенные данные под определенными именами. Эта инкапсуляция позволяет очень легко определять роли в больших проектах или собирать ограниченный пользовательский интерфейс для проверки логики, пока реальный будет совершенствоваться.
Одно предложение? Поехали.
MVVM - это шаблон сегрегации пользовательского интерфейса, в котором Xaml (представление) привязывается к фасаду (модель представления), позволяя внутренностям вашей программы (модели) избежать утечки проблем пользовательского интерфейса на уровень.
Простое утверждение, которое помогло мне лучше понять это, было «Могу ли я провести модульное тестирование своей бизнес-логики без пользовательского интерфейса?» Я думаю, это должен быть вопрос, который вы должны задать при изучении и проектировании с использованием концепций MVVM.
На этом сайте есть отличная схема, объясняющая это.
В основном у вас есть 3 компонента:
1) Модель - модель данных вашего приложения. это довольно стандартно и аналогично любому приложению MVP или MVC.
2) Представление - XAML, который определяет представление / макет вашего приложения.
3) Модель представления - поскольку WPF требует, чтобы представление прикреплялось к вещам определенным образом (например, требует, чтобы коллекции реализовывали INotifyCollectionChanged и тому подобное), обычно требуется, чтобы вы немного массировали свои данные, чтобы получить их. форма, подходящая для отображения. Здесь код модели представления. Он упаковывает данные в модели представления, которые представление может легко отобразить. Это то, к чему будет привязано ваше представление XAML. Он должен реагировать на события уровня модели и обновлять себя.
(Тогда ваши контроллеры висят где-нибудь сбоку - в идеале с помощью команд WPF - и вносят изменения в модель, которые запускают события для обновления модели представления)
шаблон, в котором интерфейс (представление) и бэкэнд (модальный) взаимодействуют (вперед и назад) с помощью общего посредника (модальный вид).
Я бы сказал что-то вроде: «Шаблон представления для разделения проблем между пользовательским интерфейсом и его логикой»
Шаблон MVVM - это когда пользовательский интерфейс взаимодействует с дружественным к xaml промежуточным объектом для доступа к вашим фактическим данным, недружественным к xaml.
Улучшенный ответ:
MVVM - это все о будущем; вы хотите отделить логику своего приложения от фреймворка, чтобы либо фреймворк мог развиваться, и ваше приложение могло не меняться, либо ваше приложение могло развиваться, и вам не нужно было так сильно беспокоиться об изменении фактических аспектов пользовательского интерфейса.
Фактически, MVVM - это усовершенствование шаблона, который существует уже некоторое время. Я помню, как менял паттерн, когда я работал в MFC. Для этого есть как минимум две причины. MFC или <> довольно сложен, и смешивание конструкций MFC с логикой вашего приложения делает приложение нестабильным. Пример:
Уже есть несколько действительно хороших объяснений в одно предложение (или близких к нему). Я просто добавлю к этому, сказав, что если вы прошли базовый уровень и вам нужен пример использования MVVM в реальном приложении, которое имеет меню, панель инструментов, диалоговые окна параметров, окна инструментов для закрепления и т. Д. взгляните на SoapBox Core и эту демонстрацию с использованием SoapBox Core . Его исходный код открыт, поэтому вы можете получить множество идей.
MVVM - это отношения между звездой и фанатом. Поклонник знает звезду, но звезда не знает поклонника. Поклонник так любит свою звезду, что, если звезда меняет себя (я имею в виду его стиль одежды), фанат соответственно меняет себя.
Теперь замените «звездочку» на «ViewModel» и «веер» на «View» и прочтите это еще раз.