powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Нейминг базовых классов
25 сообщений из 65, страница 1 из 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
25 сообщений из 65, страница 1 из 3
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Нейминг базовых классов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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