powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Нейминг базовых классов
65 сообщений из 65, показаны все 3 страниц
Нейминг базовых классов
    #39491227
Фотография Denis.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как называете базовые абстрактные классы? пример:

public abstract class UserAchievement Base
vs
public abstract class UserAchievement

Или еще какая схема?
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39491296
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis.,

В нашем стайлгайде так:

Код: c#
1.
2.
3.
4.
5.
6.
7.
public abstract class SomeAbstractClassBase : ISomeInterface
{
}

public class ConcreteSomeClass : SomeAbstractClassBase
{
}



в случае, если абстрактный базовый класс не является контрактом, а всего лишь базовой реализацией.

Если необходимо использовать абстрактный класс в качестве контракта, например, существуют методы, принимающие объекты наследников базового класса, или параметризация типом базового класса:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
public class SomeClient
{
    public void PutSomeClass(SomeAbstractClass instance);
}

public class SomeGenericHolder<TSomeClass> where TSomeClass : SomeAbstractClass
{
    // ...
}



тогда суффикс Base не используется.
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39491300
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis.Как называете базовые абстрактные классы?По настроению. Главное, чтобы название отражало суть.

зы: "стайлгайды" детский сад.
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39491304
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КDenis.Как называете базовые абстрактные классы?По настроению. Главное, чтобы название отражало суть.

зы: "стайлгайды" детский сад.
Стайлгайды - это договоренность. А вот в детском саду обычно по настроению :)
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39491334
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КПо настроению. Главное, чтобы название отражало суть.

Из разряда:

— главное, чтобы было хорошо!
— каковы критерии «хорошо»?
— ээ....

— главное, чтобы отражало суть!
— каковы критерии того, что суть отражена?
— ээаэаээ...

— главное, чтобы код был качественный!
— каковы критерии качественного кода?
— нуу...

По настроению можно копать или не копать.


Алексей Кзы: "стайлгайды" детский сад.

Детский сад, это «по настроению». Смысла обсуждать и спорить на эту тему нет, потому что по-настроенщики могут быть только одиночки, и к командной разработке таких детишек не допускают.
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39491337
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAСтайлгайды - это договоренность. А вот в детском саду обычно по настроению :)

Да вообще, Алексей удивляет.
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39491413
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttв случае, если абстрактный базовый класс не является контрактом, а всего лишь базовой реализацией.


А если и то и то? Как же быть?
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39491420
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt— главное, чтобы отражало суть!
— каковы критерии того, что суть отражена?
— ээаэаээ...Всем читателям кода понятно из названия, для чего предназначен данный класс.
hVostt— главное, чтобы код был качественный!
— каковы критерии качественного кода?
— нуу... Программа делает то, что написано в техническом задании. Программа легко модифицируется, при необходимости.
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39491423
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANAСтайлгайды - это договоренность. А вот в детском саду обычно по настроению :)

Да вообще, Алексей удивляет.Просто я работаю над долгоживущими проектами, в которых сменилось не одно поколение "стайлгайдов". :-)
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39491447
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КhVosttпропущено...


Да вообще, Алексей удивляет.Просто я работаю над долгоживущими проектами, в которых сменилось не одно поколение "стайлгайдов". :-)
Ну да, были времена, когда не было дженериков.
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39491457
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВhVosttв случае, если абстрактный базовый класс не является контрактом, а всего лишь базовой реализацией.


А если и то и то? Как же быть?

Это плохо. Надо исправить когда время будет. Речь же идёт о нейминге нового класса, следовательно ты знаешь как ты его будешь использовать. Чаще всего контрактом является интерфейс, но иногда интерфейс лишнее звено и следует использовать базовый класс как контракт.

Такой нейминг нужен, чтобы было сразу понятно, как используется класс, это снимает много вопросов на взлёте.
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39491465
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КВсем читателям кода понятно из названия, для чего предназначен данный класс.

Т.е. ты даёшь почитать ВСЕМ свой код, чтобы решить, угадал ты с названием или нет?

У нас для этого по каждому проекту формируется словарь терминов.
Есть также общий словарь для паттернов и архитектурных единиц.
У каждой переиспользуемой библиотеки также есть свой словарь.

Нет такого, чтобы какой-нибудь Вася назвал класс как ему вздумается только потому, что он решил, что все его правильно поймут. Вот это детский сад.

Алексей КПрограмма делает то, что написано в техническом задании. Программа легко модифицируется, при необходимости.

Т.е. не важно какой там говнокод, если программа делает то, что написано в тех. задании?

Как же ты поймёшь, что программа будет легко модифицироваться при необходимости? Ждать, пока не произойдёт несколько модификаций, чтобы понять, хороший код или плохой?

У нас для этого используется оценка обязанностей и ответственности классов, оценка связанности и связности компонентов, количественная оценка зависимостей, объёма кода, количества свойств/методов, оценка по следованию принципам проектирования и разработки. Также учитываются перегибы (слепое и бездумное следование принципам), антипаттерны. Мы можем сказать почему данный код плохой и хороший и объяснить почему на понятном всем языке в общепринятой терминологии.

Вообще практикуешь code review? Занимался этим когда-нибудь?
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39491483
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Base есть, Abstract в топку.
Код: c#
1.
2.
3.
4.
5.
6.
System.Reflection.Assembly
                .GetAssembly(typeof(string))
                .GetTypes()
                .Where(x => x.IsAbstract && x.IsPublic && !x.IsSealed && !x.IsInterface)
                .Select(x => x.Name)
                .OrderBy(x => x);



msAccessRule Aes Array Assembly AsymmetricAlgorithm AsymmetricKeyExchangeDeformatter AsymmetricKeyExchangeFormatter AsymmetricSignatureDeformatter AsymmetricSignatureFormatter Attribute AuditRule AuthorizationRule BaseChannelObjectWithProperties BaseChannelSinkWithProperties BaseChannelWithProperties Binder Calendar CodeAccessPermission CodeAccessSecurityAttribute CodeGroup CollectionBase CommonAcl CommonObjectSecurity Comparer`1 ConstructorInfo ContextBoundObject CriticalFinalizerObject CriticalHandle CriticalHandleMinusOneIsInvalid CriticalHandleZeroOrMinusOneIsInvalid CustomConstantAttribute Decoder DecoderFallback DecoderFallbackBuffer Delegate DeriveBytes DES DictionaryBase DirectoryObjectSecurity DSA EastAsianLunisolarCalendar Encoder EncoderFallback EncoderFallbackBuffer Encoding EncodingProvider Enum EqualityComparer`1 EventInfo EvidenceBase FieldInfo FileSystemInfo FileSystemSecurity FormattableString Formatter GenericAce GenericAcl GenericSecurityDescriptor HashAlgorithm HMAC IdentityReference IsolatedStorage IsolatedStoragePermission IsolatedStoragePermissionAttribute KeyedCollection`2 KeyedHashAlgorithm KnownAce MarshalByRefObject MaskGenerationMethod MD5 MemberInfo MethodBase MethodInfo Module MulticastDelegate NativeObjectSecurity ObjectAccessRule ObjectAuditRule ObjectSecurity ObjectSecurity`1 OrderablePartitioner`1 Partitioner`1 PropertyInfo QualifiedAce RandomNumberGenerator RC2 ReadOnlyCollectionBase RealProxy ReflectionContext Rijndael RIPEMD160 RSA SafeBuffer SafeHandle SafeHandleMinusOneIsInvalid SafeHandleZeroOrMinusOneIsInvalid SecurityAttribute SecurityState SerializationBinder SHA1 SHA256 SHA384 SHA512 Stream StringComparer SymmetricAlgorithm TaskScheduler TextReader TextWriter TimeZone TripleDES Type TypeInfo ValueType WaitHandle
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39491484
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt... в общепринятой терминологии.Ну говорю же - детский сад. Нет никакой "общепринятой терминологии". Есть стандарты имеющие конкретные наименования: ГОСТ, СНИП, ANSI, ISO и т. п. Всё остальное - чьё-то субъективное мнение. :-)
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39491527
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КhVostt... в общепринятой терминологии.Ну говорю же - детский сад. Нет никакой "общепринятой терминологии". Есть стандарты имеющие конкретные наименования: ГОСТ, СНИП, ANSI, ISO и т. п. Всё остальное - чьё-то субъективное мнение. :-)

ГОСТ нам спустили с неба в виде скрижалей?
ISO переведено с найденных манускриптов племени Майя?
ANSI это научная аксиома.
СНИП от инопланетян.

А всё остальное.. ну да, мы поняли
Уведите пациента в палату №6
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39491614
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
ГОСТ нам спустили с неба в виде скрижалей?
ISO переведено с найденных манускриптов племени Майя?
ANSI это научная аксиома.
СНИП от инопланетян.

Это общепринятые системы рекомендованные/навязанные всем заинтересованным.
Сфера их применения выходит далеко за границы отдельно взятой небольшой шаражки.
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39491690
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВЭто общепринятые системы рекомендованные/навязанные всем заинтересованным.
Сфера их применения выходит далеко за границы отдельно взятой небольшой шаражки.

Т.е. всеми приказами, регламентами и распоряжениями отдельно взятой шаражки можно попу подтереть?
Это ведь не ГОСТ и не ISO какое-то, так?

Приходишь однажды в такую контору, и тебе говорят, — ты это.. код пиши по настроению, ясно тебе? Но чтобы название классов отражало суть и всем было всё понятно, окэй? Ну и чтобы модифировать было легко. Вот как-то так. Потом проходит время и какой-нибудь Алексей К смотри в код, и говорит что ему нехрена не понятно, и что вот эти названия совсем не отражают суть, потому что твои зелёные фломастеры ему кажутся синими. И ему совсем не кажется, что твой код легко модифицировать.

И как он это объясняет? А вот так: я художник, я так вижу.

В общем, детский сад, как он есть. Во всей красе. Ага.
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39491781
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,
Нафига придумывать свои "стайлгайде", отличные от общепринятых изначально, идущих от МС?
Любой .NET программист привык к ним.
Нафига вкрячивать слово Abstract? Ну префикс "A" еще куда не шло.
Как бы ты назвал тот же Stream или TextReader?
А серьезная бизнес-модель и иерархия наследования не предок-потомок? Типа
Код: c#
1.
2.
3.
4.
 public abstract class A { }
        public class B :A { }
        public abstract class C :B { }
        public sealed class D :C { }


или сложнее?
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39491792
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВНафига придумывать свои "стайлгайде", отличные от общепринятых изначально, идущих от МС?

Где я такое говорил? Они вообще-то на них и базируются.

ЕвгенийВЛюбой .NET программист привык к ним.

Не любой, переучки (из делфи, java, C/C++...) ещё какое-то время создают локальный пздц в коде, пока не идут на поправку :)

ЕвгенийВНафига вкрячивать слово Abstract? Ну префикс "A" еще куда не шло.

Никто не вкорячивает слово Abstract, речь шла только о суффиксе Base. Если ты про пример, где класс называется SomeAbstract, это просто пример наименования класса, но я нигде не говорил, что это приставка какая-то.


ЕвгенийВКак бы ты назвал тот же Stream или TextReader?

Так бы и назвал.
Хотя касательно Stream это величайшей фейл Microsoft. Нужен был интерфейс IStream, а не базовый класс. Это просто мега-отвратительное решение. А ещё лучше IReadStream и IWriteStrem, но уже поздно.


ЕвгенийВили сложнее?

В общем, не выдумывай. Я русскими словами описал наш стайл по поводу наименования базовых классов. Если класс выступает контрактом, никаких префиксов-суффиксов не предусмотрено. Если класс выступает только как базовая реализация и не фигурирует в контрактах, то используется суффикс Base. Смысл и польза от этого — достаточно очевидные.

Как говорится, есть две самые страшные проблемы в программировании: придумывать имена переменных и инвалидировать кеш
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39491808
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Так бы и назвал.
Хотя касательно Stream это величайшей фейл Microsoft. Нужен был интерфейс IStream, а не базовый класс. Это просто мега-отвратительное решение. А ещё лучше IReadStream и IWriteStrem, но уже поздно.

Что тут то не так? Чем плох старина Stream?
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39491814
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39491820
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВЧто тут то не так? Чем плох старина Stream?

Тем, что требуется вынужденно наследоваться от класса, ты не можешь просто взять и реализовать интерфейс IStream, тебе придётся как минимум реализовать лишний адаптер.

Чаще всего потоки используются только на чтение или только на запись, а клиентам теперь приходится лишний раз проверять Stream, умеет ли он то, что от него требуется (CanRead, CanWrite, CanSeek), вместо того, чтобы выяснить это ещё на стадии компиляции (IReadStream / IWriteStream / ISeekStream).
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39491822
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВ Доступно с 4.5
Доступно с 1.1

Я надеялся, что хоть в новом стандарте поправят... ЭЭээх.
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39491827
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,
То, что нечто реализует например IReadStream - не означает, что в рантайме сможем читать.
Да и при введении тех же тасков, потребовалось переписать только 1 класс! А так, был бы IReadStream, от него отнаследовали бы IReadStreamAsync, и пришлось реализовывать всех потомком IReadStream, добавив им асинхронности.
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39491843
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВТо, что нечто реализует например IReadStream - не означает, что в рантайме сможем читать.

Именно это и означает :)
А если не сможем, то это очевидно ошибка.


ЕвгенийВДа и при введении тех же тасков, потребовалось переписать только 1 класс! А так, был бы IReadStream, от него отнаследовали бы IReadStreamAsync, и пришлось реализовывать всех потомком IReadStream, добавив им асинхронности.

А если твой стрим тупо не поддерживает асинхронный режим?
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39491926
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttЕвгенийВЧто тут то не так? Чем плох старина Stream?

Тем, что требуется вынужденно наследоваться от класса, ты не можешь просто взять и реализовать интерфейс IStream, тебе придётся как минимум реализовать лишний адаптер.

Чаще всего потоки используются только на чтение или только на запись, а клиентам теперь приходится лишний раз проверять Stream, умеет ли он то, что от него требуется (CanRead, CanWrite, CanSeek), вместо того, чтобы выяснить это ещё на стадии компиляции (IReadStream / IWriteStream / ISeekStream).

Зелено ещё. Так делать точно не надо.
Почитай "Entity interface anti-pattern".

Во первых - возвращаясь к теме топика "ИЧитатПоток" странное имя. Логичнее уж IInputStream/IOutputStream

Во вторых, продолжу "Архитектуру".
Добавим для примера "способность" асинхронного чтения: IAsyncReadStream, IAsyncWriteStream.
Теперь добавим для примера "способность" прерывать асинхронное чтение: IInterruptableStream.

Вот насоздавали кучу интерфайсов. Попробуем их использоват.
Пусть у нас метод, который получает как параметр поток, который одновременно IAsyncReadStream, IInterruptableStream, ISeekStream.
Описать его одним интерфейсом не получится. Значит создадим комбинации:
I[Random | Sequential][Async | Interruptable | Blocking] [Read | Write] Stream.

Теперь можно описать параметр метода одним интерфейсом IRandomInterruptableAsyncReadStream. Вспотел?

Проблема дизайна очевидна: создавая для каждого "свойства" свой интерфейс мы будем каждый раз умножать кол-во интерфейсов
и при этом писать кучу "невыполняемого" бесполезного кода в угоду "архитектуре", при этом полностью теряя из вида что архитектура является не самоцелью а только методом.

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

Но заметь, реализация у нас будет только одна FileStream.
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39492013
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikronПочитай "Entity interface anti-pattern".

Не к месту.

mikronВо первых - возвращаясь к теме топика "ИЧитатПоток" странное имя. Логичнее уж IInputStream/IOutputStream

Логичнее, согласен, мне просто лень было набирать IReadableStream, так что придирка мимо.

mikronЗначит создадим комбинации:
I[Random | Sequential][Async | Interruptable | Blocking] [Read | Write] Stream.

И в чём проблема оставить базовый класс Stream, наследующий все интерфейсы? И нашим и вашим. Такой подход активно практикуется Microsoft, посмотри на фильтры ASP.NET MVC.

mikronТеперь можно описать параметр метода одним интерфейсом IRandomInterruptableAsyncReadStream. Вспотел?

Нет, не вспотел. Серебряной пули не существует, но это не значит, что невозможно найти разумный компромисс.

mikronПроблема дизайна очевидна: создавая для каждого "свойства" свой интерфейс мы будем каждый раз умножать кол-во интерфейсов

Это не проблема, это расширяемость. Видеть в расширяемости проблему, это гениально.


mikronи при этом писать кучу "невыполняемого" бесполезного кода в угоду "архитектуре", при этом полностью теряя из вида что архитектура является не самоцелью а только методом.

Как раз таки наоборот. Если мне нужен поток только для чтения, я реализую такой поток, за каким хреном мне надо реализовывать +100500 доп. методов бросая NotImplementedException? Нахрена мне этот мусорный балласт?

mikronИрония так же в том, что в итоге мы всё это просто выкинем, просто потому что некоторые свойства которые мы описали интерфейсами динамические и зависят от времени выполнения. К примеру тот-же поток. Под одним и тем же путём может быть и файл и канал.

Если я принимаю поток только для чтения, мне всё равно что там, файл или канал, или ещё что-то. Главное чтобы он мог читать. Что мне даст во времени выполнения возможность файла ещё и писать, а канала только читать, если мне нужно только чтение изначально? Тут ты за уши притянул лишнего :)

Пока что не убедительно.
Рано говорить «зелено».
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39492031
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttХотя касательно Stream это величайшей фейл Microsoft. Нужен был интерфейс IStream, а не базовый класс. Это просто мега-отвратительное решение. А ещё лучше IReadStream и IWriteStrem, но уже поздно.
hVosttИ в чём проблема оставить базовый класс Stream, наследующий все интерфейсы? И нашим и вашим.
Вспомнился детский анекдот советских времен. Бабушка дает свидетельские показания в суде:
- Ну, иду значит по лесу, грибочки собираю, смотрю, в кустах - эти двое еб*тся...
- (судья перебивает) Свидетель, не "еб*тся" а "сношаются"
- А, ладно, иду значит по лесу, грибочки собираю, смотрю, в кустах - эти двое сношаются, пригляделась - еб*тся!
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39492038
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LRВспомнился детский анекдот советских времен. Бабушка дает свидетельские показания в суде:
- Ну, иду значит по лесу, грибочки собираю, смотрю, в кустах - эти двое еб*тся...
- (судья перебивает) Свидетель, не "еб*тся" а "сношаются"
- А, ладно, иду значит по лесу, грибочки собираю, смотрю, в кустах - эти двое сношаются, пригляделась - еб*тся!

Я говорил про замену контракта со Stream на I***Stream, а не убрать класс Stream вовсе. Так что анекдот из разряда, услышал звон, да не знаю где он.
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39492045
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttЯ говорил про замену контракта со Stream на I***Stream, а не убрать класс Stream вовсе. Так что анекдот из разряда, услышал звон, да не знаю где он.
mikronПусть у нас метод, который получает как параметр поток, который одновременно IAsyncReadStream, IInterruptableStream, ISeekStream.
Описать его одним интерфейсом не получится.
Что дальше?
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39492061
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LRЧто дальше?

Элементарно, Ватсон

Код: c#
1.
2.
3.
4.
    public interface ISomeClient
    {
        void GetMeStream<TStream>(TStream stream) where TStream : IAsyncReadStream, IInterruptableStream, ISeekStream;
    }



Дайте уже разумные аргументы
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39492073
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttЭлементарно, Ватсон
Что ж, замечательно, согласен.))
Однако, касательно "Stream это величайшей фейл Microsoft. Нужен был интерфейс IStream, а не базовый класс" нужно заметить, что в те далекие времена дженериков еще не было - ничего другого Microsoft-у не оставалось.
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39492103
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttLRЧто дальше?

Элементарно, Ватсон

Код: c#
1.
2.
3.
4.
    public interface ISomeClient
    {
        void GetMeStream<TStream>(TStream stream) where TStream : IAsyncReadStream, IInterruptableStream, ISeekStream;
    }



Дайте уже разумные аргументы
Ограничение отписать легко, а вот кто и когда реализует TStream?
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39492113
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttИменно это и означает :)
А если не сможем, то это очевидно ошибка.
Если Барак Обама перегрыз провод и не льются байты - это не ошибка, это авария.

hVostt
А если твой стрим тупо не поддерживает асинхронный режим?
Тупо синхронно выполниться метод имеющий асинхронную сигнатуру.
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39492116
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttmikronВо первых - возвращаясь к теме топика "ИЧитатПоток" странное имя. Логичнее уж IInputStream/IOutputStream

Логичнее, согласен, мне просто лень было набирать IReadableStream, так что придирка мимо.

vHost, скажи, как можно вести с тобой разумную полемику если ты просто из упёртости отрицаеш даже те аргументы с кототрыми сам соглашаешся?

Судя по твоим ответам ты не понял.


hVosttmikronЗначит создадим комбинации:
I[Random | Sequential][Async | Interruptable | Blocking] [Read | Write] Stream.

И в чём проблема оставить базовый класс Stream, наследующий все интерфейсы? И нашим и вашим. Такой подход активно практикуется Microsoft, посмотри на фильтры ASP.NET MVC.

Вот именно это и проблема "Entity interface anti-pattern". Куча интерфеийсов и только одна реализация.
Твой аргумент - ссылка на авторитеты говорит так-же против - МС не сделала ненужные интерфейсы.

hVosttНет, не вспотел. Серебряной пули не существует, но это не значит, что невозможно найти разумный компромисс.
mikronПроблема дизайна очевидна: создавая для каждого "свойства" свой интерфейс мы будем каждый раз умножать кол-во интерфейсов
Это не проблема, это расширяемость. Видеть в расширяемости проблему, это гениально.

Это не расширяемость а пустая трата ресурсов человеческих (на написание) и машинных (при выполнении).
Что даст специално для под кокнретный набор своиств заточенный интерфеис? Ведь всегда можно использовать надмножество.


hVosttmikronи при этом писать кучу "невыполняемого" бесполезного кода в угоду "архитектуре", при этом полностью теряя из вида что архитектура является не самоцелью а только методом.
Как раз таки наоборот. Если мне нужен поток только для чтения, я реализую такой поток, за каким хреном мне надо реализовывать +100500 доп. методов бросая NotImplementedException? Нахрена мне этот мусорный балласт?

Это экономически обоснованно:
В 99.99 % случаев потоки не преопределяются. И значит болшинство не тянет ненужный баласт в виде интерфейсов.
А в 0.01% случаев если потребуется реализовывать свой "поток" эти расходы приемлемы и оправданы.

hVosttmikronИрония так же в том, что в итоге мы всё это просто выкинем, просто потому что некоторые свойства которые мы описали интерфейсами динамические и зависят от времени выполнения. К примеру тот-же поток. Под одним и тем же путём может быть и файл и канал.
Если я принимаю поток только для чтения, мне всё равно что там, файл или канал, или ещё что-то. Главное чтобы он мог читать. Что мне даст во времени выполнения возможность файла ещё и писать, а канала только читать, если мне нужно только чтение изначально? Тут ты за уши притянул лишнего :)

Или ты недопонял.
Если тебе нужен поток для чтения и с позиционированием ты не сможеш этого гарантировать ни какими контрактами на этапе компиляции,
так-как доступные интерфейсы определяются только во время выполнения.
Но это доступно в других ОО подчодах, например в COM.
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39492158
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikronЕсли тебе нужен поток для чтения и с позиционированием ты не сможеш этого гарантировать ни какими контрактами на этапе компиляции,
так-как доступные интерфейсы определяются только во время выполнения.
Решение было приведено выше .
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39492213
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LRЧто ж, замечательно, согласен.))
Однако, касательно "Stream это величайшей фейл Microsoft. Нужен был интерфейс IStream, а не базовый класс" нужно заметить, что в те далекие времена дженериков еще не было - ничего другого Microsoft-у не оставалось

Ну с коллекциями-то они порешали. Хоть и не идеально, но хорошо. Почему то, что верно для коллекций, коллекций с количеством, коллекций с индексацией, коллекцией с возможностью добавления/удаления и т.д. это верно, а для стримов вдруг неверно?
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39492216
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВОграничение отписать легко, а вот кто и когда реализует TStream?

Реализует поставщик стримов. Реализует именно те интерфейсы, которые имеют смысл. Остальные нет.
Для чтения потока данных из сети, очевидно не будет Seek и Write.
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39492218
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВТупо синхронно выполниться метод имеющий асинхронную сигнатуру.

В то время, когда ты ожидаешь именно асинхронного поведения и не хочешь блокировать поток? Ну-ну :)
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39492224
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikronvHost, скажи, как можно вести с тобой разумную полемику если ты просто из упёртости отрицаеш даже те аргументы с кототрыми сам соглашаешся?

Давай без демагогии?

mikronВот именно это и проблема "Entity interface anti-pattern". Куча интерфеийсов и только одна реализация.
Твой аргумент - ссылка на авторитеты говорит так-же против - МС не сделала ненужные интерфейсы.

Куча интерфейсов далеко не одна реализация. В этом и смысл. Так что мимо опять.


mikronЭто не расширяемость а пустая трата ресурсов человеческих (на написание) и машинных (при выполнении).

Не вижу пояснений. Небо зелёное.


mikronТвой аргумент - ссылка на авторитеты говорит так-же против - МС не сделала ненужные интерфейсы.

Ничего подобного не наблюдаю, что бы подтверждало твой тезис.


mikronВ 99.99 % случаев потоки не преопределяются. И значит болшинство не тянет ненужный баласт в виде интерфейсов.

Откуда статистика? Мой опыт показывает обратное. Недавно реализовывал сервер WebDAV, жутко плевался на необходимость реализации нужного Stream отдельным классом и кучи NotImplementedException. Так что не надо выдумывать какую-то фигню.


mikronА в 0.01% случаев если потребуется реализовывать свой "поток" эти расходы приемлемы и оправданы.

Не выдумывай. Взял какие-то глупые проценты и потолка и пытаешься пихнуть их мне в виде аргументов. Совсем что ли за дураков людей держишь??


mikronЕсли тебе нужен поток для чтения и с позиционированием ты не сможеш этого гарантировать ни какими контрактами на этапе компиляции,
так-как доступные интерфейсы определяются только во время выполнения.

Чё ты несёшь? Если мне нужен IReadableStream, а компонент его не реализует, то будет ошибка компиляции. Если ошибки компиляции не будет, значит я ожидаю, что компонент реализует нужный мне интерфейс и ничего в рантайме чекать мне не придётся.


mikronНо это доступно в других ОО подчодах, например в COM.

Не знаю к чему ты упомянул COM. Ну ладно, он воплощает идеи ООП. И что?
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39492226
Addx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда мы обсуждаем базовые классы то в целом понятно, название должно отражать функционал.
А если мы наследуемся от базового класса, и создаем класс с прикладной логикой?
Что-то вроде FileSearchStream?
По сути смысл указания в названии, что он CanRead и CanSeek теряет всякий смысл - не тащить же в название весь список методов и поддерживаемых интерфейсов?
По сути стайлгайд в наименовании классов не может быть универсальным (не привязанным к конкретной системе)

hVosttЯ говорил про замену контракта со Stream на I***Stream, а не убрать класс Stream вовсе.

Почему бы не убрать вообще из всех классов параметры-классы и не оставить только интерфейсы?
А к каждому классу в базовых библиотеках создать одноименный интерфейс?
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39492229
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AddxА если мы наследуемся от базового класса, и создаем класс с прикладной логикой?
Что-то вроде FileSearchStream?

Твой пример мне говорит о том этот стрим только для чтения. Значит он должен реализовывать соответствующие интерфейсы. При чём тут наименование. Если он не умеет писать, у тебя даже не получится скомпилировать попытку записи. Это вин. Фейл, это забыть проверить CanWrite, и попытаться записать. Или проверить CanWrite и выбросить NotSupportedException, когда ты мог бы вообще этой фигнёй не заниматься изначально.


AddxПо сути смысл указания в названии, что он CanRead и CanSeek теряет всякий смысл - не тащить же в название весь список методов и поддерживаемых интерфейсов?

Это никак не кореллирует с названием классов. Мы говорим о контрактах. Ты либо хочешь читать из потока, либо писать в поток, либо то и другое. Плевать как называется класс, ты ведь получаешь ссылку на объект.


AddxПочему бы не убрать вообще из всех классов параметры-классы и не оставить только интерфейсы?
А к каждому классу в базовых библиотеках создать одноименный интерфейс?

Не утрируй :) Говорим о конкретном фейле Microsoft. Интерфейсы головного мозга это тоже антипаттерн.
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39492234
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttЕвгенийВОграничение отписать легко, а вот кто и когда реализует TStream?

Реализует поставщик стримов. Реализует именно те интерфейсы, которые имеют смысл. Остальные нет.
Для чтения потока данных из сети, очевидно не будет Seek и Write.

Попробуй реализовать обычный фаил ма диске.
Какие интерфесы он будет реализовывать? И каие будут всегда работать?

Ещё раз: контрактами на этапе компиляции невозможно гарантировать доступность интерфейса время выполнения.
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39492243
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttmikronТвой аргумент - ссылка на авторитеты говорит так-же против - МС не сделала ненужные интерфейсы.

Ничего подобного не наблюдаю, что бы подтверждало твой тезис.

Так посмотри же на класс Stream и FileStream.
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39492247
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikronПопробуй реализовать обычный фаил ма диске.
Какие интерфесы он будет реализовывать? И каие будут всегда работать?

При чём тут твой файл на диске?

стандартный класс Stream реализует хоть что-то?
читает файл с диска?

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

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

Я хочу ТОЛЬКО читать из потока. В методе ты видишь, что он принимает Stream. А я хочу, чтобы ты вообще не мог сунуть объект потока, который не умеет читать. Чтобы потом не ловить ошибки в рантайме. Нафига?
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39492254
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttmikronЕсли тебе нужен поток для чтения и с позиционированием ты не сможеш этого гарантировать ни какими контрактами на этапе компиляции,
так-как доступные интерфейсы определяются только во время выполнения.

Чё ты несёшь? Если мне нужен IReadableStream, а компонент его не реализует, то будет ошибка компиляции. Если ошибки компиляции не будет, значит я ожидаю, что компонент реализует нужный мне интерфейс и ничего в рантайме чекать мне не придётся.


Вот ты исползуеш FileStream как реализуюший класс. Никаких проверок в коде. Компилируется.
Но во время работы программы создаётс FileStream для пути по которому находится файл/пайп в кототрый можно только писать. Очевидно что весь код болле не рабочий и твой "архитектурные" испражнения ни к чему не видут. Нужна всё та же проверка в коде IsReadable.
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39492258
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikronВот ты исползуеш FileStream как реализуюший класс. Никаких проверок в коде. Компилируется.
Но во время работы программы создаётс FileStream для пути по которому находится файл/пайп в кототрый можно только писать. Очевидно что весь код болле не рабочий и твой "архитектурные" испражнения ни к чему не видут. Нужна всё та же проверка в коде IsReadable.

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

В общем, пример никак не аргументирует и не защищает твою позицию.
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39492261
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikron,

Возьмём вот этот метод WebClient.OpenRead . Возвращает поток для чтения. Будешь проверять CanRead? Или сразу будешь читать? А если CanRead вернул false? А писать в поток будешь?
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39492272
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttmikronВот ты исползуеш FileStream как реализуюший класс. Никаких проверок в коде. Компилируется.
Но во время работы программы создаётс FileStream для пути по которому находится файл/пайп в кототрый можно только писать. Очевидно что весь код болле не рабочий и твой "архитектурные" испражнения ни к чему не видут. Нужна всё та же проверка в коде IsReadable.

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

В общем, пример никак не аргументирует и не защищает твою позицию.

откудого у тебя возникнет эксепшен? Может кто то всё-же будет делать проверки?

hVosttзначит я ожидаю, что компонент реализует нужный мне интерфейс и ничего в рантайме чекать мне не придётся.

Значит всё-таки твой интерфейс ничего не гарантирует. Значит нет в нём ползы. Исползуй базовый класс Stream.
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39492283
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttНу с коллекциями-то они порешали. Хоть и не идеально, но хорошо. Почему то, что верно для коллекций, коллекций с количеством, коллекций с индексацией, коллекцией с возможностью добавления/удаления и т.д. это верно, а для стримов вдруг неверно?
Может быть поэтому?
[Serializable]
public abstract class CollectionBase : IList, ICollection,IEnumerable
[SerializableAttribute]
[ ComVisibleAttribute(true) ]
public abstract class Stream : MarshalByRefObject , IDisposable
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39492288
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttmikron,

Возьмём вот этот метод WebClient.OpenRead . Возвращает поток для чтения. Будешь проверять CanRead? Или сразу будешь читать? А если CanRead вернул false? А писать в поток будешь?
Ответ на твой вопрос не однозначен, но в обшем случае я не буду делать никаких проверок.
Это только подчёркивает что нет смысла плодить интерфейсы IReadStream. Базового класса Stream kak это делает МС достаточно.
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39492295
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttЧаще всего потоки используются только на чтение или только на запись, а клиентам теперь приходится лишний раз проверять Stream, умеет ли он то, что от него требуется (CanRead, CanWrite, CanSeek), вместо того, чтобы выяснить это ещё на стадии компиляции (IReadStream / IWriteStream / ISeekStream).

Надеёсь мы прояснили, что на этапе компиляции этого нелзя выяснит?
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39492299
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LR[ ComVisibleAttribute(true) ]
public abstract class Stream : MarshalByRefObject , IDisposable

Похоже, именно поэтому.
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39492305
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikronоткудого у тебя возникнет эксепшен? Может кто то всё-же будет делать проверки?

У тебя метод есть, загружающий данные из потока. Что тебе даст чтение CanRead? Скажет только, что о том, что поток не читабельный. А почему не скажет. Чтобы выяснить почему, надо всё таки попробовать выполнить чтение и надеяться на то, что в исключении будет больше информации.

Будет ещё прикольней, если CanRead бросит исключение )))
Или CanRead вернёт false, а сам поток при этом вполне читабельный.

Жопа короче.


mikronЗначит всё-таки твой интерфейс ничего не гарантирует. Значит нет в нём ползы. Исползуй базовый класс Stream.

Интерфейс это контракт. Контракт это гарантии. Гарантирует. Если нет, то всеми контрактами можно подтереться.
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39492308
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikronОтвет на твой вопрос не однозначен, но в обшем случае я не буду делать никаких проверок.

А почему? Там ведь может быть стрим, который не умеет читать, а только писать.


mikronЭто только подчёркивает что нет смысла плодить интерфейсы IReadStream. Базового класса Stream kak это делает МС достаточно.

Я понял, твой единственный аргумент это авторитет Microsft. Раз MS так решила, значит это самый верный путь. Всё ясно.
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39492310
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikronhVosttЧаще всего потоки используются только на чтение или только на запись, а клиентам теперь приходится лишний раз проверять Stream, умеет ли он то, что от него требуется (CanRead, CanWrite, CanSeek), вместо того, чтобы выяснить это ещё на стадии компиляции (IReadStream / IWriteStream / ISeekStream).

Надеёсь мы прояснили, что на этапе компиляции этого нелзя выяснит?

Не выдумывай. На этапе компиляции выясняется соответствие интерфейсов. Т.е. выполнение контрактов, которые гарантируют соответствующую реализацию. Если что-то не реализовано по контракту, это ошибка разработчика, он идёт и исправляет её. Или ошибка глубже, например, сетевая ошибка, ошибка файловой системы. Сам контракт гарантирует реализацию, а не правильную реализацию.
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39492389
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

Я устал, я умолкаю
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39492434
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttОткуда статистика? Мой опыт показывает обратное. Недавно реализовывал сервер WebDAV, жутко плевался на необходимость реализации нужного Stream отдельным классом и кучи NotImplementedException. Так что не надо выдумывать какую-то фигню.

9 лет назад тоже делал WebDAV, не представляю, нафига там нужен свой Stream....
И да, друг мой Хвост, умные люди читают из потока используя например BinaryReader.
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39492436
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikronhVostt,

Я устал, я умолкаю

Ну ок :)
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39492438
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВ9 лет назад тоже делал WebDAV, не представляю, нафига там нужен свой Stream....

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

ЕвгенийВИ да, друг мой Хвост, умные люди читают из потока используя например BinaryReader.

А конструктор BinaryReader что по-твоему принимает? Тот же Stream. Который хрен ещё его знает, умеет читать или нет. Узнаешь потом.
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39492474
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
WebDAV представляет виртуальную файловую систему. В нашем случае, на деле ни файлов, ни каталогов не существует, они для каждого пользователя свои. Пользователи работают с файлами, открывая их и копируя, это реализовывается через сетевой интерфейс, который работает с потоками.
Если проводник windows может выступать клиентом WebDAV, не значит, что WebDAV "представляет виртуальную файловую систему (с)".
WebDAV - расширение HTTP и может и используется (в microsoft exchange) например для доступа к почте.

hVostt
А конструктор BinaryReader что по-твоему принимает? Тот же Stream. Который хрен ещё его знает, умеет читать или нет. Узнаешь потом.
Это да, но он и сделает все проверки, которые лень делать простому программисту :)
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39492490
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВЕсли проводник windows может выступать клиентом WebDAV, не значит, что WebDAV "представляет виртуальную файловую систему (с)".
WebDAV - расширение HTTP и может и используется (в microsoft exchange) например для доступа к почте.
RFC устроит?

Web Distributed Authoring and Versioning (WebDAV) consists of a set
of methods, headers, and content-types ancillary to HTTP/1.1 for the
management of resource properties, creation and management of
resource collections, URL namespace manipulation, and resource
locking (collision avoidance).
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39492536
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВЕсли проводник windows может выступать клиентом WebDAV, не значит, что WebDAV "представляет виртуальную файловую систему (с)".
WebDAV - расширение HTTP и может и используется (в microsoft exchange) например для доступа к почте.

Я вообще не понял к чему ты это сказал. У нас есть виртуальная файловая система, индивидуальная для каждого пользователя, мы предоставляем доступ к ней через WebDAV. Есть аналогичный доступ через веб интерфейс. При желании, можно замутить FTP интерфейс или ещё какой-нибудь.

ЕвгенийВЭто да, но он и сделает все проверки, которые лень делать простому программисту :)

То есть мало того, что я должен сделать отдельный класс, так как я не могу просто реализовать интерфейс читателя из потока, мне нужен отдельный класс. Я должен использовать ещё какой-то дополнительный класс, чтобы реализовать чтение из класса потока, который я сам же сделал. Не находишь, что это перебор?
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39492674
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
А мне плевать. Я работаю в одиночку
...
Рейтинг: 0 / 0
Нейминг базовых классов
    #39492677
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2А мне плевать. Я работаю в одиночку

Гыгыг
...
Рейтинг: 0 / 0
65 сообщений из 65, показаны все 3 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Нейминг базовых классов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]