Потоковый класс.NET плохо разработан?

VistaDB имеет специальную версию, которая является бесплатной использовать и является синтаксисом и драйвером, совместимым с SQL Server. VistaDB является единственным файлом и только требует, чтобы их драйвер .dll работал в Вашем asp.net или проекте winforms.

, Так как это - синтаксис и источник данных, совместимый, можно обновить до SQL Server в случае необходимости.

от их сайта:

VistaDB является полностью управляемый и безопасный с точки зрения типов ASP.NET и приложения WinForms с помощью C#, VB.NET и других совместимых CLR языков.

VistaDB.net

18
задан I. J. Kennedy 8 August 2010 в 00:17
поделиться

6 ответов

Я думаю, что классы хорошо спроектированы. Я бы предпочел проверить свойство, а затем попытаться что-то сделать и поймать исключение. Интерфейсы не работают в случае типов потоков, которые относятся к нескольким «типам». Какой тип будет возвращен из метода, который дает вам доступный для чтения и записи поток? Я согласен, что это не настоящий объектно-ориентированный дизайн, но действительно ли вы хотите обрабатывать потоки таким образом? Некоторые свойства могут измениться, если поток закрыт или что-то еще изменится. Что произойдет в этом случае?

Я думаю, что этот вопрос вызывает действительно интересный эксперимент, почему бы не попробовать создать свои собственные классы, связанные с потоком. Опубликуйте свой редизайн на CodePlex или Google Code, это был бы отличный учебный опыт и мог бы стать потенциально полезной библиотекой для использования другими.

10
ответ дан 30 November 2019 в 07:13
поделиться

Использование интерфейсов будет означать, что значение CanRead не может быть изменено во время выполнения. Класс FileStream изменяет свойство CanRead в зависимости от текущего состояния файла.

9
ответ дан 30 November 2019 в 07:13
поделиться

Интерфейсы могут использоваться слишком часто, и это может быть одним из таких случаев. Я считаю, что нынешний дизайн великолепен. Тот факт, что потоки могут изменять возможности во время выполнения, означает, что IReadable / IWritable / ISeekable не устранит необходимость в CanRead, CanWrite и CanSeek, поэтому вы просто увеличиваете сложность без реальной выгоды, кроме устранения нескольких методов и свойств-заглушек. в производных классах.

Лично я предпочитаю, чтобы класс потока было проще использовать, чем писать, потому что вы напишете его один раз и будете использовать много раз.

5
ответ дан 30 November 2019 в 07:13
поделиться

Вероятно, они не использовали интерфейсы, потому что в то время не было методов расширения. Если вы хотите, чтобы у каждого потока были такие вещи, как метод ReadByte по умолчанию, вам нужно было использовать класс.

Я написал сообщение в блоге пару месяцев назад о том, почему мне не нравятся IO.Stream и то, что я думал, должно быть сделано. По сути, это сводится к тому, что потоки не очень безопасны по типам.

7
ответ дан 30 November 2019 в 07:13
поделиться

Class Stream использует дополнительный шаблон функций, вы можете прочитать больше здесь .

4
ответ дан 30 November 2019 в 07:13
поделиться

Вы можете использовать подход (Java *) для написания почти пустого класса MyStream , который наследует базовый класс Stream , но предоставляет большую часть методы-члены (например, CanSeek () ) и встраивание их в разумное поведение по умолчанию (например, бросание NotImplemented ). Затем ваш настоящий класс просто расширяет ваш класс MyStream , реализуя два или три оставшихся метода, которые вам действительно нужны.

Повторно используя свой класс MyStream , вы значительно сэкономите изобретением колеса.

* Это называется класс абстрактного адаптера в библиотеках Java.

1
ответ дан 30 November 2019 в 07:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: