Почему у нас так много разновидностей .NET? Это хорошая вещь? [закрыто]

9

Существует множество «разновидностей» .NET Framework :

  • Полный («нормальный»)
  • Подмножество профиля клиента
  • Silverlight в веб-браузерах
  • «Silverlight» на Windows Phone
  • Компактный каркас
  • WinRT

Когда на новой платформе требуется код C #, может показаться, что Microsot предпочитает взять полный CLR и сократить его до небольшого подмножества, создавая новые сборки и перемещая типы, а не просто используя существующие сборки, такие как в BCL. , Например, Silverlight имеет различные классы / методы для WPF (даже если некоторые методы имеют слегка отличающиеся сигнатуры или очень разные реализации), вместо того, чтобы просто ссылаться на ту же реализацию, List<T>что и WPF.

Это идеальная архитектура или признак наследства? Разве BCL не должен работать на всех платформах с разными библиотеками презентаций / ввода-вывода на каждой? Или BCL и другие библиотеки слишком раздуты, и их разделение создаст слишком много проблем обратной совместимости, чтобы быть приемлемым?

Если бы мы начали с чистого листа и не беспокоились о обратной совместимости, будет ли текущая ситуация действительно лучшим способом работы с несколькими платформами?

Пол Стовелл
источник
7
Что со всеми близкими голосами? Это совершенно законный вопрос.
Мейсон Уилер
2
Это выглядит так, как будто оно может быть закрыто, возможно, потому, что оно сформулировано немного объективно (похоже, вы уже решили, что оно «плохо спроектировано»). Возможно, вы захотите перефразировать его как « почему так много разновидностей .NET?»
FrustratedWithFormsDesigner
1
@FrustratedWithFormsDesigner прав. Вопрос начинается с предвзятости против .NET. Если бы тон был более нейтральным, я подозреваю, что не было бы подано никаких близких голосов.
Одед
2
Мне кажется, что вы пытаетесь начать спор, а не искать конструктивных ответов на свой вопрос. Я предполагаю, что именно поэтому вы получаете близкие голоса.
Тианна
2
@Oded и другие - я переписал название и текст, надеюсь, это встретит ваше одобрение :)
Пол Стовелл

Ответы:

5

То, что делает Microsoft, разделяя подпрограммы на несколько пакетов, является распространенным явлением. Существует версия .NET, которая работает на одноплатных компьютерах (.Net Micro Framework) с ограниченной памятью. Не имеет смысла включать в эту версию все, что требуется для запуска, например, полноценного графического интерфейса пользователя.

Если вы посмотрите на Apple, iPhone не содержит всех процедур, которые можно найти на Mac.

JonnyBoats
источник
Но вместо того, чтобы программист копировал / вставлял код для List<T>создания Micro Framework List<T>, разве не следует правильно разделить BCL, чтобы исполняемые файлы работали на всех платформах?
Пол Стовелл
2
Другими словами, не должен ли запуск кода на другой платформе быть просто выбором того, какие сборки поддерживать?
Пол Стовелл
1
Ява делает это также. Например, Java Card является подмножеством Java.
Бернард
2
@PaulStovell: я не уверен, как MS это делает ... но я не удивлюсь, если у MS будет отдельный путь / скрипт сборки (проще говоря), который берет код и собирает его для целевой платформы - так это не копирование / вставка, List<T>но это может убрать некоторые вещи из кода или слиться с некоторыми специфичными для платформы вещами и создать элемент развертывания.
Стивен Эверс
1

Я не думаю, что .NET - это проблема. Несмотря на то, что существуют различные среды выполнения, они все еще совместимы, поэтому такие технологии, как Portable Class Libraries, работают (для большинства перечисленных вами сред времени выполнения).

Например, не должен ли каждый вариант ссылаться на одну общую сборку, называемую «System.Collections.dll», вместо того, чтобы каждая среда выполнения имела свою собственную копию System.dll / mscorlib.dll с различными копиями коллекций?

Зачем это нужно? Пока все они совместимы (опять же, смотрите Portable Class Libraries), это не должно иметь значения, поскольку BCL является частью самой среды выполнения и распространяется в тандеме.

Рид Копси
источник
Разве я не смогу написать класс, который использует List<T>и запускает его только на любой платформе, не создавая переносимую библиотеку? Или List<T>сам не должен быть в переносимой библиотеке? Переносимые библиотеки кажутся мне обходным путем, а не частью элегантного дизайна.
Пол Стовелл
1

.NET по сути заменяет и расширяет com-объекты в среде Windows. Он также используется для определения множества совершенно разных технологий. Представьте, что если Adobe переименовала все свои продукты в общее название, это то, что происходит с .NET.

Ryathal
источник