|
Как назвать такой странный код от Microsoft ?
|
|||
---|---|---|---|
#18+
Имеется некий базовый класс DBConnection. У него есть метод CreateCommand, возвращающий DbCommand. https://referencesource.microsoft.com/#System.Data/System/Data/Common/DBConnection.cs,130 Он основывается на некоем интерфейсе: Код: c# 1. 2. 3. 4.
Метод реализован странно: Код: c# 1. 2. 3. 4. 5. 6. 7.
И есть класс SqlConnection, реализующий свой метод CreateCommand: https://referencesource.microsoft.com/#System.Data/System/Data/SqlClient/SqlConnection.cs,1145 Код: c# 1. 2. 3. 4. 5. 6.
Понятно, что если бы метод CreateCommand был виртуальным, это бы вынудило SqlConnection в точности переопределять прототип метода. Метод DbCommand CreateCommand не является абстрактным и чтобы обойти необходимость реализовывать метод, обходит это через создание абстрактного CreateDbCommand, которые не реализуется ни самим DbConnection, ни SqlConnection. И все для того, чтобы SqlConnection мог "переопределить" этот метод через new у себя. Но зачем, если он не наследует интерфейс родителя ? Для чего все это было сделано ? Не является ли это нарушением целой кучи принципов и паттернов программирования. Как например, несоответствие класса предка интерфейсу класса родителя и создание параллельной, теневой иерархии. Нарушен ли тут, к примеру, "принцип подстановки Барбары Лисков" или нет ? Другой пример параллельной иерархии. Хотя SqlCommand наследуется от DbCommand, но также не наследует его интерфейс, и также закрывает методы предка своими: https://referencesource.microsoft.com/#System.Data/System/Data/Common/DBCommand.cs,174 Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
Что это, элегантный код, или наоборот пример кода студента ? Какая задумка подо всем этим ? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2019, 16:29 |
|
Как назвать такой странный код от Microsoft ?
|
|||
---|---|---|---|
#18+
PS. Скорее всего метод CreateDbCommand в SqlConnection, все таки, переопределен, просто находится в другом классе, т.к. сам класс является partial. Его реализацию я не нашел, но это тоже лишь добавляет странности всему решению. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2019, 16:35 |
|
Как назвать такой странный код от Microsoft ?
|
|||
---|---|---|---|
#18+
Почему нельзя было обойтись таким решением ? Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2019, 16:46 |
|
Как назвать такой странный код от Microsoft ?
|
|||
---|---|---|---|
#18+
WaspNewCore, чему Вы удивляетесь? Разные команды индусов шли к успеху разными путями. Потом кто-то умный скрестил ежа и ужа. Хрясь-хрясь и в продакшен! Уже хорошо, что договорились, что все называется CreateDbParameter, а не DbCreateParameter, ParameterDbCreate или MakeParameterDb. Еще вариант - MadeInMSSql ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2019, 18:36 |
|
Как назвать такой странный код от Microsoft ?
|
|||
---|---|---|---|
#18+
WaspNewCore, да всё можно было сделать как Вам хочется... правда с релизом пришлось бы подождать 17 лет :) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2019, 23:48 |
|
Как назвать такой странный код от Microsoft ?
|
|||
---|---|---|---|
#18+
WaspNewCore, Пробуйте другие библиотеки. Что вы уперлись в один класс?)). Вот если и в других так, тогда мы поможем вам не уйти в запой из за несовершенства мира4)) LOL ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2019, 09:58 |
|
Как назвать такой странный код от Microsoft ?
|
|||
---|---|---|---|
#18+
WaspNewCoreЕго реализацию я не нашел плохо искал, исходники доступны ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2019, 10:30 |
|
Как назвать такой странный код от Microsoft ?
|
|||
---|---|---|---|
#18+
Petro123мы поможем вам не уйти в запой из за несовершенства мирамы поможем вам не уйти в запой из за несовершенства мира ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2019, 12:18 |
|
Как назвать такой странный код от Microsoft ?
|
|||
---|---|---|---|
#18+
В общем подумал. Могу предположить, что все это было сделано из-за того, что классы DbConnection и SqlConnection поддерживают фреймворк 1.1, согласно МСДН. А дженерики появились только начиная с 2 версии фреймворка. Без дженериков такой способ наверное единственный дать возможность классам предкам предоставлять удобный интерфейс вида Код: c# 1. 2. 3. 4.
вместо Код: c# 1. 2. 3. 4. 5. 6.
Что обидно. Вот выпустили они новый Net.Core. Новый, с иголочки. А код все тот же... https://github.com/dotnet/corefx/blob/a10890f4ffe0fadf090c922578ba0e606ebdd16c/src/System.Data.SqlClient/src/System/Data/SqlClient/SqlCommand.cs https://github.com/dotnet/corefx/blob/a10890f4ffe0fadf090c922578ba0e606ebdd16c/src/System.Data.SqlClient/src/System/Data/SqlClient/SqlConnection.cs Вот к чему может привести поддержка доисторических фреймворков. Глядишь человечество (или тот искусственный интеллект, который заменит людей) в космос начнет летать, покорит Андромеду, а на космических кораблях в 25 тысячном году все также будет использоваться не эффективный код, из-за необходимости поддерживать тот самый, первый фреймворк. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2019, 17:42 |
|
Как назвать такой странный код от Microsoft ?
|
|||
---|---|---|---|
#18+
WaspNewCoreNet.Core. Новый, с иголочки.он новый и без совместимости для веб. А для десктоп еще не делали). ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2019, 18:04 |
|
Как назвать такой странный код от Microsoft ?
|
|||
---|---|---|---|
#18+
WaspNewCoreЧто обидно. Вот выпустили они новый Net.Core. Новый, с иголочки. А код все тот же... https://github.com/dotnet/corefx/blob/a10890f4ffe0fadf090c922578ba0e606ebdd16c/src/System.Data.SqlClient/src/System/Data/SqlClient/SqlCommand.cs https://github.com/dotnet/corefx/blob/a10890f4ffe0fadf090c922578ba0e606ebdd16c/src/System.Data.SqlClient/src/System/Data/SqlClient/SqlConnection.cs Новый Core не означает отсутствие необходимости поддерживать существующий код. Конечно, плохих решений в стандартной библиотеке выше крыши. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2019, 03:56 |
|
Как назвать такой странный код от Microsoft ?
|
|||
---|---|---|---|
#18+
багов в .net довольно много, опытные программисты обычно знают о них и ни кто не правит эти баги с ранних версий 2.0 таких примеров масса и вашем случае, это даже не баг. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2019, 12:46 |
|
Как назвать такой странный код от Microsoft ?
|
|||
---|---|---|---|
#18+
Roman Mejtesтаких примеров масса и вашем случае, это даже не баг. Да и про неэффективность тоже зря упомянуто. Архитектурно кривой - да. Неэффективный - вряд ли. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2019, 13:07 |
|
Как назвать такой странный код от Microsoft ?
|
|||
---|---|---|---|
#18+
что за бред тут написан? пусть ТС приведёт пример правильного, по его мнению кода WaspNewCoreПочему нельзя было обойтись таким решением ? Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
...и пусть скажет почему этот кусок кода полное дерьмо ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2019, 22:46 |
|
Как назвать такой странный код от Microsoft ?
|
|||
---|---|---|---|
#18+
WaspNewCoreабстрактного CreateDbCommand, которые не реализуется ни самим DbConnection, ни SqlConnection. Вот тут загадка. "ни самим DbConnection" - так и должно быть, т.к. там метод и объявлен абстрактным, а вот "ни SqlConnection" загадочно, ибо наследник обязан реализовывать все абстрактные члены. https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/abstract Members marked as abstract, or included in an abstract class, must be implemented by classes that derive from the abstract class. Пока объяснением видится "partial" (public sealed partial class SqlConnection), т.е. мы не располагаем всеми исходниками... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2019, 00:19 |
|
Как назвать такой странный код от Microsoft ?
|
|||
---|---|---|---|
#18+
LRWaspNewCoreабстрактного CreateDbCommand, которые не реализуется ни самим DbConnection, ни SqlConnection. Вот тут загадка. "ни самим DbConnection" - так и должно быть, т.к. там метод и объявлен абстрактным, а вот "ни SqlConnection" загадочно, ибо наследник обязан реализовывать все абстрактные члены. https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/abstract Members marked as abstract, or included in an abstract class, must be implemented by classes that derive from the abstract class. Пока объяснением видится "partial" (public sealed partial class SqlConnection), т.е. мы не располагаем всеми исходниками... IL код после декомпиляции не содержит никаких Partial, посмотрите в ILSpy или dotnetPeek'е, что там по факту, на референс сорс исходники старые. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2019, 10:28 |
|
Как назвать такой странный код от Microsoft ?
|
|||
---|---|---|---|
#18+
Roman MejtesIL код после декомпиляции не содержит никаких Partial, посмотрите в ILSpy или dotnetPeek'е, что там по факту, на референс сорс исходники старые. Ну х.з., а есть ли смысл компилятору помещать в бинарник информацию о том что класс partial? И, главное, даже в "старых" исходниках наследник должен реализовывать абстрактный метод базового класса (поскольку этой реализации мы не находим, единственно правильный вывод - мы имеем не все исходники). ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2019, 12:56 |
|
Как назвать такой странный код от Microsoft ?
|
|||
---|---|---|---|
#18+
Cat2WaspNewCore, чему Вы удивляетесь? Разные команды индусов шли к успеху разными путями. Потом кто-то умный скрестил ежа и ужа. Хрясь-хрясь и в продакшен! Уже хорошо, что договорились, что все называется CreateDbParameter, а не DbCreateParameter, ParameterDbCreate или MakeParameterDb. Еще вариант - MadeInMSSql ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2019, 19:28 |
|
|
start [/forum/topic.php?fid=20&msg=39763850&tid=1399093]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
26ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 287ms |
total: | 411ms |
0 / 0 |