Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

EF Core. scaffold-dbcontext. DBFirst

1316  1 2 3 4 все
  nepsy знакомое лицо23.08.21 09:41
nepsy
23.08.21 09:41 

Есть таблица



CREATE TABLE [dbo].[Orders] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[UserId] INT NOT NULL,
[IsProcessed] BIT DEFAULT (CONVERT([bit],(0))) NOT NULL,
CONSTRAINT [PK_Orders] PRIMARY KEY CLUSTERED ([Id] ASC)
);



Создаю классы вызывая при помощи Scaffold-DbContext (DBFirst):



автор
PM> Scaffold-DbContext "Server=(localdb)\mssqllocaldb; Database=TestDb; Trusted_Connection=true;" Microsoft.EntityFrameworkCore.SqlServer
Build started...
Build succeeded.


To protect potentially sensitive information in your connection string, you should move it out of source code. You can avoid scaffolding the connection string by using the Name= syntax to read it from configuration - see https://go.microsoft.com/fwlink/?linkid=2131148. For more guidance on storing connection strings, see http://go.microsoft.com/fwlink/?LinkId=723263.
The column 'dbo.Orders.IsProcessed' would normally be mapped to a non-nullable bool property, but it has a default constraint. Such a column is mapped to a nullable bool property to allow a difference between setting the property to false and invoking the default constraint. See https://go.microsoft.com/fwlink/?linkid=851278 for details.






Создается класс:



public partial class Order
{
public int Id { get; set; }
public int UserId { get; set; }
public bool? IsProcessed { get; set; }
}



Изначально поле в таблице было не нулевым, а в классе создается нулевым.
Такая особенность и как с этим бороться не понятно. Править каждый раз в ручную, при наличае более 15 классов не хочется. Есть ли какие-нибудь соображения по этому поводу?

#1 
NightWatch коренной житель23.08.21 11:00
NightWatch
NEW 23.08.21 11:00 
в ответ nepsy 23.08.21 09:41
Такая особенность и как с этим бороться не понятно.

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


#2 
alex445 свой человек23.08.21 11:46
NEW 23.08.21 11:46 
в ответ nepsy 23.08.21 09:41

Можно ещё сюда глянуть - там в первом ответе

Scaffold mapping on non-nullable bool · Issue #10840 · dotnet/efcore · GitHub

#3 
  nepsy знакомое лицо23.08.21 11:54
nepsy
NEW 23.08.21 11:54 
в ответ alex445 23.08.21 11:46

Спасибо всем. Воспользовался extention "EF Core Power Tool".

#4 
alex445 свой человек23.08.21 13:47
NEW 23.08.21 13:47 
в ответ nepsy 23.08.21 11:54, Последний раз изменено 23.08.21 13:51 (alex445)

Было бы EF Code First, то такой проблемы бы не было. Кроме того, Code First это готовый как бы скрипт по созданию базы данных. И миграции потом тоже на нём же (Code First) писать можно. И если проект разрабатывается с приоритетом в код на Шарпе - т.е. шарповский код первичен и на нём делается главная модель приложения, то и хранилище (БД) тоже логичнее генерить из шарповских моделей - максимально близко к главной модели. Потому что реляционная модель БД и ООП не маппятся друг на друга со 100% совместимостью.

#5 
Срыв покровов коренной житель24.08.21 15:45
NEW 24.08.21 15:45 
в ответ alex445 23.08.21 13:47

были бы у бабки яйца…

#6 
Murr патриот24.08.21 19:11
Murr
NEW 24.08.21 19:11 
в ответ alex445 23.08.21 13:47

> и хранилище (БД) тоже логичнее генерить из шарповских моделей

-----

Да-да, конечно...

Специфицируй, плс, в шарповой модели... триггер.

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


Да, забыл... есть такая ерунда как расширения для МС СКЛ сервера - пишешь сборку, втыкаешь в сервер и юзаешь функциональность.

Недавно Я тут задавал вопросик про пару СКЛ запросов - один из вариантов решения - написать такую сборку... токма там не МС СКЛ, а Постгрее...

Ну и как ты будешь ЭТО генерить из шарповой модели?

#7 
Murr патриот24.08.21 19:30
Murr
NEW 24.08.21 19:30 
в ответ nepsy 23.08.21 09:41
Есть ли какие-нибудь соображения по этому поводу?

------

Я слегка поизвращаюсь?


Насчет Коре - не уверн, не работал.


Для обычного проекта...

В проекте есть два набора команд - before & after.

Кроме этого в составе MS SQL есть утилита ISQL или что там у них сейчас...


Ну и прописываешь

DROP CONSTRAINT на before

и

ADD CONSTRAINT на after. смущ

Ну или два батника...

#8 
alex445 свой человек25.08.21 09:47
NEW 25.08.21 09:47 
в ответ Murr 24.08.21 19:11, Последний раз изменено 25.08.21 09:57 (alex445)
> и хранилище (БД) тоже логичнее генерить из шарповских моделей
-----
Да-да, конечно...
Специфицируй, плс, в шарповой модели... триггер.
А когда специфицируешь - добейся чтобы база его компилировала однократно...


Да, забыл... есть такая ерунда как расширения для МС СКЛ сервера - пишешь сборку, втыкаешь в сервер и юзаешь функциональность.
Недавно Я тут задавал вопросик про пару СКЛ запросов - один из вариантов решения - написать такую сборку... токма там не МС СКЛ, а Постгрее...
Ну и как ты будешь ЭТО генерить из шарповой модели?

Это просто спор о том, на чём лучше писать приложения. DBA говорят, что программисты не нужны - всё на СУБД делать можно, и нужно только прикрутить к СУБД расширения для написания GUI и прочего. Программисты говорят, что DBA не нужны, и БД можно делать на языке программирования, нужно только прикрутить расширения для создания триггеров и прочего.


Беглый поиск показал, что триггеры вкорячиваются через миграции прямо на Transact-SQL:

https://stackoverflow.com/a/56263887/5015385

Я правда не понял, что это за объект или метод Sql с кучей кода внутри - как будто в воздухе висит. Там есть метод RawSql. Но зато поддерживаются параметризованные и интерполированные строки, т.е. можно прямо из Шарпа повставлять в SQL-запрос значения и названия переменных без напечатывания их вручную в голой строке.


Но это явно решение лишь оттого, что изначально Code First не был задуман для 100% замены средств разработки СУБД. С другой стороны, сама СУБД и реляционные БД - костыль для моделей, созданных изначально на ООП. Если бы всё (в том числе средства хранения данных) изначально для ООП точилось, то не нужны были бы маппинги и прочий костылизм.


Я могу вызвать код Transact-SQL через C# (ну или отправить в СУБД на исполнение), а можно ли в БД через Transact-SQL вызвать код C#?


Ещё можно смешивать коды SQL и C#, а вот наоборот - навряд ли. Вот пример с интерполированной строкой в LINQ


var blogs = context.Blogs
    .FromSqlInterpolated($"SELECT * FROM dbo.SearchBlogs({searchTerm})")
    .Where(b => b.Rating > 3)
    .OrderByDescending(b => b.Rating)
    .ToList();
#9 
alex445 свой человек25.08.21 10:01
NEW 25.08.21 10:01 
в ответ alex445 25.08.21 09:47

Вообще, БД должна только хранить данные. Триггеры и хранимые процедуры - вообще любая логика - это уже "программирование на СУБД", и вынос логики в СУБД. Этого не должно быть. Вся логика в БД должна только обслуживать саму БД и никаких операций с данными не делать. А то борятся-борятся за разделение ответственности по слоям, а потом пихают всё куда попало. Или дублируют логику - типа своя валидация в каждом слое.

#10 
Срыв покровов коренной житель25.08.21 11:57
NEW 25.08.21 11:57 
в ответ alex445 25.08.21 10:01

«должна» в идеальном мире с розовыми пони.

#11 
MrSanders коренной житель25.08.21 12:13
NEW 25.08.21 12:13 
в ответ Срыв покровов 25.08.21 11:57

И даже в этом идеальном мире это не про то, что пациент пишет.

На триггер возбудился, сразу "логику" увидел. Как дальше жить...

Когда у меня 1 запись на миллион чтений я могу кучу триггеров понаделать. Лишь бы чтение/поиск ускорить. И к "логике приложения" это не будет иметь ни малейшего отношения.

#12 
AlexNek патриот25.08.21 13:24
AlexNek
NEW 25.08.21 13:24 
в ответ alex445 25.08.21 10:01
Вся логика в БД должна только обслуживать саму БД и никаких операций с данными не делать.

Хорошая теория, пока нет специальных условий. спок

#13 
Срыв покровов коренной житель25.08.21 13:27
NEW 25.08.21 13:27 
в ответ MrSanders 25.08.21 12:13, Последний раз изменено 25.08.21 13:29 (Срыв покровов)

как например реализовать поле с Autoincrement в оракле без триггеров?


так можно дойти и до того, что будем ключи в таблицах запрещать

#14 
alex445 свой человек25.08.21 13:32
NEW 25.08.21 13:32 
в ответ MrSanders 25.08.21 12:13, Последний раз изменено 25.08.21 13:32 (alex445)
Когда у меня 1 запись на миллион чтений я могу кучу триггеров понаделать. Лишь бы чтение/поиск ускорить. И к "логике приложения" это не будет иметь ни малейшего отношения.

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

#15 
alex445 свой человек25.08.21 13:40
NEW 25.08.21 13:40 
в ответ Срыв покровов 25.08.21 13:27, Последний раз изменено 25.08.21 13:43 (alex445)
так можно дойти и до того, что будем ключи в таблицах запрещать

Ключи нужны для создания реляционных связей. Но по идее, у вас уже есть связи в бизнес-логике. Вы зачем-то дублируете эти связи в БД, но по правилам БД, где не всё можно отобразить на бизнес-слой (и наоборот). А потом через слой работы с БД (ORM или ещё какой паттерн хранилища данных) сглаживаете углы и несовместимости. И вот у вас уже три слоя, с тремя моделями, которые все означают примерно одно и то же, при этом один слой существует вообще лишь для интеграции двух остальных.


Если бы можно было затолкать всю БД в оперативку, то и БД с ORM не понадобилось бы. Тем более, насколько мне известно, СУБД и так в своих оптимизациях держит наиболее часто выполняемые запросы или подзапросы в RAM (или что-то подобное - типа кеша).


То, что создатели баз данных пытаются на своих расширениях SQL целые приложения писать, это как некоторые фронтэндщики пытаются протолкнуть в CSS вычисления и далее продвинуть это, судя по всему, до ещё одного языка программирования. Расширения SQL были сделаны для того, чтобы немного облегчить работу DBA, а не позволить им писать полноценные приложения. Javascript и CSS были придуманы, чтобы немного облегчить жизнь создателям интернет-страничек, а не позволить им писать полноценные приложения. Но всё пошло не по плану...

#16 
Срыв покровов коренной житель25.08.21 15:05
NEW 25.08.21 15:05 
в ответ alex445 25.08.21 13:40

опять же это все идеальный мир с розовыми пони и приложениями уровня сложности хеллоуворлд.

Когда тебе нужно запилить отчетик сложнее среднего, ты обплюешься, если делать это придётся через какой-нибудь ORM.

#17 
Murr патриот25.08.21 17:59
Murr
NEW 25.08.21 17:59 
в ответ alex445 25.08.21 09:47

изначально Code First не был

-----

Он и сейчас до этого не дорос.

По секрету скажу - и не дорастет никогда. Просто это не его область.

Область применения этого инструмента - очень узкая. Очень мелкие базы... по паре-другой тысяч строк на таблицу... прототипирование... ну еще пара мелочей. Для всего остального надо брать ДБА... и менять код под его продукцию.


а можно ли в БД через Transact-SQL вызвать код C#?

-----

Как минимум двумя способами.

Первый - сборкой добавленной к инстансу сервера.

Второй - ловлей эвентов сервера... это как раз к вопросу об тригерах.

#18 
alex445 свой человек25.08.21 20:40
NEW 25.08.21 20:40 
в ответ Murr 25.08.21 17:59, Последний раз изменено 25.08.21 20:41 (alex445)
изначально Code First не был
-----
Он и сейчас до этого не дорос.
По секрету скажу - и не дорастет никогда. Просто это не его область.
Область применения этого инструмента - очень узкая. Очень мелкие базы... по паре-другой тысяч строк на таблицу... прототипирование... ну еще пара мелочей. Для всего остального надо брать ДБА... и менять код под его продукцию.

Я не знаю СУБД так глубоко. Для повышения производительности таблицы в частности и БД вообще обкуриваются какой-то особо забористой оптимизационной травой, которую не вдохнуть через Code First?

#19 
Murr патриот25.08.21 22:33
Murr
NEW 25.08.21 22:33 
в ответ alex445 25.08.21 20:40

обкуриваются какой-то особо забористой

------

Профессия есть. Называется - ДБА.

И, поверь, между тем что будет порождено посредством Code First

и тем что сделает приличный ДБА будет очень большая разница.

Не в пользу первого. разумеется...

#20 
alex445 свой человек26.08.21 11:17
NEW 26.08.21 11:17 
в ответ Murr 25.08.21 22:33

Другое дело, что во многих случаях эквилибристика оптимизаций DBA не нужна, и можно обойтись банальным Code First, да? Или прямо каждый второй - Гугл и у них миллионы записей в таблицах и сотни тысяч транзакций каждый день?

#21 
Срыв покровов коренной житель26.08.21 11:45
NEW 26.08.21 11:45 
в ответ alex445 26.08.21 11:17

не обязательно быть Гуглом, чтобы насобирать за год 100500 миллионов строк мусора.
там уже не до розовых соплей, там берётся за дело 59-летний коллега и изучает Execution plan.

#22 
MrSanders коренной житель26.08.21 13:03
NEW 26.08.21 13:03 
в ответ alex445 26.08.21 11:17, Последний раз изменено 26.08.21 13:04 (MrSanders)
Или прямо каждый второй - Гугл и у них миллионы записей в таблицах и сотни тысяч транзакций каждый день?

Ага. Гугол. Сотни тысяч каждый день... А сотни тысяч каждый час месье не желает? Для магазина "машины носочки" Code First отличное решение. Для страховки/банка/сети магазинов - убийственная тупость. Даже с поверхностными знаниями SQL и конкретной RDBMS можно превзойти результаты code first на порядки.

Из личного опыта: ускорение чтения более чем в 600 раз. Вместо 10-15 минут до 0.5 - 1.5 секунд. Просто убрали сложный ключ (заменили интом) и сэкономили пару десятков джойнов (добавили триггер, копирующий PK созданной записи в одну табличку).

А проблема, из-за которой я Code First ненавижу, аж кушать не могу, в том, что частенько проект начинается как "машины носочки" а через два года "класс! а теперь выкатываем это в продакшен для 10.000 филиалов! Что значит работать не будет? Что значит проще переписать заново чем доработать?" Я уже не знаю с каким количеством проектов я так мучался.

#23 
Срыв покровов коренной житель26.08.21 13:30
NEW 26.08.21 13:30 
в ответ MrSanders 26.08.21 13:03, Последний раз изменено 26.08.21 13:31 (Срыв покровов)

#24 
AlexNek патриот26.08.21 14:41
AlexNek
NEW 26.08.21 14:41 
в ответ alex445 26.08.21 11:17
и можно обойтись банальным Code First

Один раз ради интереса попробовал и больше не смог.

Ну удобнее c ER дизайнером работать. Все база видна, нет зависимости от используемой версии EF, и генериш что надо.

#25 
alex445 свой человек26.08.21 15:41
NEW 26.08.21 15:41 
в ответ Срыв покровов 26.08.21 11:45, Последний раз изменено 26.08.21 15:41 (alex445)
не обязательно быть Гуглом, чтобы насобирать за год 100500 миллионов строк мусора.
там уже не до розовых соплей, там берётся за дело 59-летний коллега и изучает Execution plan.

Ну т.е. не меня и какого-нибудь другого джуниора-миддла запрягают? А то на некоторых собесах так спрашивают, будто джуны им в одно рыло Гугл поднимают. Т.е. берём и делаем базу на EF Code First, а когда припрёт, зовём пенсионера, чтобы процедурок-триггеров нам в базу накидал? Reicht?

#26 
alex445 свой человек26.08.21 15:51
NEW 26.08.21 15:51 
в ответ MrSanders 26.08.21 13:03
Ага. Гугол. Сотни тысяч каждый день... А сотни тысяч каждый час месье не желает? Для магазина "машины носочки" Code First отличное решение. Для страховки/банка/сети магазинов - убийственная тупость. Даже с поверхностными знаниями SQL и конкретной RDBMS можно превзойти результаты code first на порядки.

Ребята-ребята! Code First - это для программиста по-быстрому БД накидать, и заодно чтобы скрипт создания БД не писать на SQL. Ваш DBA не знает C# скорее всего, так что ему ни Code First, ни Database First не сдался - это вообще не для него. Если вы делаете второй Гугол или Дойчебанк там, то явно не вешаете все задачи на одного программиста, а имеете целую команду DBA и прочих специалистов, так что программист не лезет в создание и управление базами данных, а DBA - в код приложений, так? Тогда спора нет - нафиг этот Code First не сдался.


What is Code-First?
Entity Framework introduced the Code-First approach with Entity Framework 4.1. Code-First is mainly useful in Domain Driven Design.

What is Code-First? (entityframeworktutorial.net)


Кстати, ASP.NET MVC уже устарел (все версии) - теперь рулит Razor Pages (синяя плашка по ссылке Tutorial: Get Started with Entity Framework 6 Code First using MVC 5 | Microsoft Docs).

#27 
alex445 свой человек26.08.21 15:53
NEW 26.08.21 15:53 
в ответ MrSanders 26.08.21 13:03
а через два года "класс! а теперь выкатываем это в продакшен для 10.000 филиалов! Что значит работать не будет? Что значит проще переписать заново чем доработать?" Я уже не знаю с каким количеством проектов я так мучался.

Нормальный подход. Или вам нравится вечно со старым дерьмом работать? Нужно же думать заранее, чем вы через два года заниматься будете. ))

#28 
alex445 свой человек26.08.21 15:57
NEW 26.08.21 15:57 
в ответ AlexNek 26.08.21 14:41

Один раз ради интереса попробовал и больше не смог.

Ну удобнее c ER дизайнером работать. Все база видна, нет зависимости от используемой версии EF, и генериш что надо.

Только в подходе "сначала код" ты должен разбираться лишь в сишарпе (ну и немного в конвенциях EF), а в подходе "сначала база" вы должны быть виртуозом графического дизайнера БД. Так недалеко и до Visual programming language - Wikipedia опуститься. Просто вам непривычно, потому что вы с графического дизайнера начинали.

#29 
Murr патриот26.08.21 21:16
Murr
NEW 26.08.21 21:16 
в ответ alex445 26.08.21 11:17

Или прямо каждый второй

-----

Данные имеют свойство накапливаться.

Причем - довольно быстро.

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

Решение проблемы известно - нужно добавлять индекс по паре полей...


сотни тысяч транзакций каждый день?

-----

Импорт 20-30 документов в день...

Документы в базе не хранятся - хранится только (подготавливаемые однажды) "значения по умолчанию" для каждого клиента и типа обработки. Клиентов - десятка два, обработок - потенциально 9999, используется много меньше.

Итого - 20.000 записей начинают генерировать проблемы производительности.

#30 
MrSanders коренной житель26.08.21 21:21
NEW 26.08.21 21:21 
в ответ alex445 26.08.21 15:53
Нормальный подход. Или вам нравится вечно со старым дерьмом работать? Нужно же думать заранее, чем вы через два года заниматься будете. ))

А попробуйте угадать - сколько раз разрешили переписать заново? Из .... ну пусть для удобства будет 10 проектов.

#31 
Murr патриот26.08.21 21:23
Murr
NEW 26.08.21 21:23 
в ответ AlexNek 26.08.21 14:41

Все база видна

-----

А это - плохо.

Как прикладник ты базу должен видеть только в том виде в каком ее тебе даст ДБА.


С дугой стороны - когда контора мучает хомяка по паре недель на страничку обучение персонала написанию 80-90% тестируемого кода путем глядения только в схему базы дает существенный прирост общей производительности...

#32 
Murr патриот26.08.21 21:37
Murr
NEW 26.08.21 21:37 
в ответ alex445 26.08.21 15:41

чтобы процедурок-триггеров нам в базу накидал?

-----

А оно решит проблему?

Выше же уже написано - Что значит проще переписать?


Был такой маленький кусочек - планировщик смен.

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

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

Так Я его не смог заменить - им пользовалось 2 Гб спагетти-кода... где-то, как-то что-то вынималлось, как-то обсчитывалось, каждый раз это делалось по-другому т.к. в конкретном месте нужен был "не такой" результат и получить его можно было только обработав имеющиеся ошибки определенным способом...

Чтобы его заменить - надо переработать все 2 Гб спагетти...

#33 
Murr патриот26.08.21 21:44
Murr
NEW 26.08.21 21:44 
в ответ alex445 26.08.21 15:53

Нормальный подход.

-----

Значит не понял. Ну это бывает.

Чтобы было понятнее - систему сделали, бюджет исчерпан.

Кому и какими деньгами ты собираешься платить за модификацию стандалонного АРМа под "10.000 филиалов"?

#34 
Murr патриот26.08.21 22:03
Murr
NEW 26.08.21 22:03 
в ответ alex445 26.08.21 15:57

потому что вы с

-----

Для умных: мне без разницы что использовать код- или - база- первым.

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


Если не все еще не понятно - напиши представление... хммм... обычного адреса... т.е. как обычно - фамилия имя отчество, страна, город, улица, дом, квартира, почтовый индекс... пыхх... чего там еще... аааа... у нас в Ирландии не всегда есть город и улица, но есть графство - используются имена собственные для домов... ну еще нюансы в других странах... и уложи это в базу. Потом просто уложи туда... у нас более 100 стран... хммм... ну скажем по 30 млн записей на каждую страну. И заставь это все работать быстро... Разумеется используя Коде-Фирст... Когда поймешь в чем проблема - посмеемся вместе...

#35 
AlexNek патриот26.08.21 22:07
AlexNek
NEW 26.08.21 22:07 
в ответ alex445 26.08.21 15:57
разбираться лишь в сишарпе

Не считая соглашений о генерации таблиц из кода смущ


виртуозом графического дизайнера БД

Да любой школьник нарисует там таблички с колонками.

с графического дизайнера начинали

точнее с листа бумажки

Не нашел просто ни одного преимущества, особенно в долгосрочной перспективе.

Хотел вот недавно старый проект обновить, а фиг вам - нет совместимости пишет.

Да и смотреть на энто или на код две разные вещи.



#36 
AlexNek патриот26.08.21 22:11
AlexNek
NEW 26.08.21 22:11 
в ответ Murr 26.08.21 21:23
Как прикладник ты базу должен видеть только в том виде в каком ее тебе даст ДБА

Проблема только в том, что мне попадались только две вещи или база есть или ее нет. И ДБА вживую никогда не видел смущ

В этих случаях без ER диаграмм ну никак.

#37 
Murr патриот26.08.21 22:35
Murr
NEW 26.08.21 22:35 
в ответ AlexNek 26.08.21 22:11

И ДБА вживую никогда не видел

-----

Так и слава богу - не допустил господь до греха... смущ

Тем не менее - видеть базу, как прикладник, ты должен только в том виде в каком ее даст ДБА.

А как она реально выглядит - тебе занать не надо... и даже вредно.

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

#38 
alex445 свой человек27.08.21 10:09
NEW 27.08.21 10:09 
в ответ Murr 26.08.21 21:16, Последний раз изменено 27.08.21 10:12 (alex445)
Или прямо каждый второй
-----
Данные имеют свойство накапливаться.
Причем - довольно быстро.
Той базе, которую Я делал для системы импорта, проблемы производительности появились уже на второй год эксплуатации.
Решение проблемы известно - нужно добавлять индекс по паре полей...

Чистить периодически?


Нормальный подход. Или вам нравится вечно со старым дерьмом работать? Нужно же думать заранее, чем вы через два года заниматься будете. ))
А попробуйте угадать - сколько раз разрешили переписать заново? Из .... ну пусть для удобства будет 10 проектов.

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


С какого-то времени поддержка старого софта без переписывания становится дороже переписывания. Ну, так во всех областях, не только в софте. Софт тоже протухает, ржавеет и распадается на атомы.


Ну удобнее c ER дизайнером работать. Все база видна, нет зависимости от используемой версии EF, и генериш что надо.

Насчёт "вся база видна" - тоже спорно. А если у меня монитор маленький или таблиц за сотню? Что толку созерцать сотню квадратиков с несколькими сотнями связей между ними на одном мониторе - ничего не понятно же.


Вот три примера подобного визуального подхода

LabVIEW

MS SQL Server

Typical Scheme


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

#39 
alex445 свой человек27.08.21 10:14
NEW 27.08.21 10:14 
в ответ MrSanders 26.08.21 21:21, Последний раз изменено 27.08.21 10:15 (alex445)
А попробуйте угадать - сколько раз разрешили переписать заново? Из .... ну пусть для удобства будет 10 проектов.

Всякие крупные магазины и вообще большие компании, начиная от Гуглов, заканчивая средними банками, ретейлерами и прочими, переписывают свои сервисы каждые несколько лет. Дайте догадаюсь, почему? Приходит новый тимлид или мода меняется, и теперь всё не на Реакте, а на каком-нибудь Ангуляре - и вся минимум морда магазина или сервиса переделывается.


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

#40 
alex445 свой человек27.08.21 10:18
NEW 27.08.21 10:18 
в ответ Murr 26.08.21 21:44

Чтобы было понятнее - систему сделали, бюджет исчерпан.

Кому и какими деньгами ты собираешься платить за модификацию стандалонного АРМа под "10.000 филиалов"?

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

#41 
alex445 свой человек27.08.21 10:20
NEW 27.08.21 10:20 
в ответ Murr 26.08.21 21:37, Последний раз изменено 27.08.21 10:21 (alex445)
Так Я его не смог заменить - им пользовалось 2 Гб спагетти-кода... где-то, как-то что-то вынималлось, как-то обсчитывалось, каждый раз это делалось по-другому т.к. в конкретном месте нужен был "не такой" результат и получить его можно было только обработав имеющиеся ошибки определенным способом...
Чтобы его заменить - надо переработать все 2 Гб спагетти...

И вы сказали об этом начальникам, или побоялись увольнения? Как я понимаю, в таких случаях должны решать начальники (если ты сам не начальник) - переписывать с нуля, или продолжать поддерживать неподдерживаемое.

#42 
alex445 свой человек27.08.21 10:24
NEW 27.08.21 10:24 
в ответ AlexNek 26.08.21 22:11
Проблема только в том, что мне попадались только две вещи или база есть или ее нет. И ДБА вживую никогда не видел смущ

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

#43 
AlexNek патриот27.08.21 11:02
AlexNek
NEW 27.08.21 11:02 
в ответ alex445 27.08.21 10:24
Все работают в маленьких конторах

ну 1000 чел. вроде не маленькая контора.

#44 
AlexNek патриот27.08.21 11:08
AlexNek
NEW 27.08.21 11:08 
в ответ Murr 26.08.21 22:35
в том виде в каком ее даст ДБА.

ну и в каком виде обычно тебе ее давали?


тебе знать не надо... и даже вредно

не знаю, как у тебя, но у меня обычно нижняя точка для работы с базой - это работа с конкретными таблицами.

Даже запрос какой-то необычный сфарганить и то нужно знать как там таблицы связаны и что там накручено.

#45 
MrSanders коренной житель27.08.21 11:26
NEW 27.08.21 11:26 
в ответ alex445 27.08.21 10:14
Всякие крупные магазины и вообще большие компании, начиная от Гуглов, заканчивая средними банками, ретейлерами и прочими, переписывают свои сервисы каждые несколько лет.

Бугагашеньки. Ага. Переписывают. Каждые несколько... десятилетий. Когда куча скотча и соплей уже не могут поддерживать слепленное дендрофекальное угробище.

Ну и на вопрос вы не ответили. Так что открываю карты - ни разу, №;%:. Экванамисты и особенно топы это редкостные мрази. Им насрать на всё кроме их бонусов. Сэкономил миллион на ИТ - маладца, получи бонус! А то что проект разваливается и через 5 лет надо вбухивать 20 миллионов, менеджера ниипёт. Он уже давно ускакал на другой проект или в другую фирму - бонусы собирать.


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

#46 
Murr патриот27.08.21 11:34
Murr
NEW 27.08.21 11:34 
в ответ alex445 27.08.21 10:09

Чистить периодически?

------

Если "почистить" - девочкам придется "дефаулты" готовить по-новой.

А там - надо знать тех.процесс и понимать что делаешь... если чего не так - потом в ручную править - это медленно и не все могут...


это нормально

-----

Блин, ну когда ты начнешь экономику учитывать...

Элементарно же - за новую функциональность что-то платят, за исправление чего-то там, что не сказывается на функциональности/производительности - как правило - нет...

Вообщем - берешь отпуск за свой счет и пару лет доводишь кусок кода до идеала.

Потом считаешь что в кармане и говоришь себе - "это нормально".

#47 
Murr патриот27.08.21 11:40
Murr
NEW 27.08.21 11:40 
в ответ alex445 27.08.21 10:18

Короче, проще всё переписать...

------

Ну перепиши. Правда денег тебе за это дадут как за "поправить поле в форме"...


люди, что делали эту систему, уволились

------

Вот это уже работа менеджеров - найти чем загрузить и чтоб было оплачиваемо...

#48 
Murr патриот27.08.21 11:45
Murr
NEW 27.08.21 11:45 
в ответ alex445 27.08.21 10:20

И вы сказали об этом начальникам, или побоялись увольнения?

------

Сказать - сказал. И даже 6 лет что-то делал для решения проблемы.

Но 2 Гб спагетти-кода есть 2 Гб спагетти-кода...


Как я понимаю

-----

Плохо ты понимаешь... но поработаешь - поймешь...

#49 
Murr патриот27.08.21 11:54
Murr
NEW 27.08.21 11:54 
в ответ AlexNek 27.08.21 11:08

запрос какой-то необычный сфарганить и то нужно знать как там таблицы связаны и что там накручено

------

Это потому что ты в область ДБА влазишь.

Если не влазишь - для тебя база "плоская"...


ну и в каком виде обычно тебе ее давали?

------

В таком, что приходилось объяснять ДБА где у него ошибка... хммм

Иногда - исправляли, иногда не исправляли и потом вылазило...

Но сути это не меняет - есть работа ДБА и пусть он ее делает... как умеет.

#50 
Murr патриот27.08.21 12:03
Murr
NEW 27.08.21 12:03 
в ответ MrSanders 27.08.21 11:26

Переделывать 15-и летнее угробище - очень страшная задача.

-----

Он этого пока не понимает... хммм

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

Каждую следующую ведь будет найти сложнее, чем вторую-третью... хотя и проще чем первую.

#51 
alex445 свой человек27.08.21 13:43
NEW 27.08.21 13:43 
в ответ AlexNek 27.08.21 11:08
в том виде в каком ее даст ДБА.

ну и в каком виде обычно тебе ее давали?

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


Если я увижу БД, и надо будет с ней работать, я просто натравлю на неё Entity Framework и буду работать через ORM.

#52 
alex445 свой человек27.08.21 13:45
NEW 27.08.21 13:45 
в ответ AlexNek 27.08.21 11:08
Даже запрос какой-то необычный сфарганить и то нужно знать как там таблицы связаны и что там накручено.

А как вам такое задание

NET und C# ohne Web? - Щас глянул один видос ютубе Типичная - Программирование (germany.ru)

#53 
alex445 свой человек27.08.21 13:51
NEW 27.08.21 13:51 
в ответ MrSanders 27.08.21 11:26
Всякие крупные магазины и вообще большие компании, начиная от Гуглов, заканчивая средними банками, ретейлерами и прочими, переписывают свои сервисы каждые несколько лет.

Бугагашеньки. Ага. Переписывают. Каждые несколько... десятилетий.

В том-то и дело, что переписывают. Пользовался долго банком, магазином, ещё одним банком, сервисом по продаже билетов и ещё до кучи. Ни один не продержался с одной и той же мордой хотя бы 5 лет - всё было заменено на модные технологии. Был раньше десктопный и мобильный вариант? Теперь один адаптирующийся. Был раньше адаптирующийся, но на старом фреймворке? Теперь на новом, с новым "плоским" дизайном.


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

#54 
alex445 свой человек27.08.21 13:54
NEW 27.08.21 13:54 
в ответ Murr 27.08.21 11:45

И вы сказали об этом начальникам, или побоялись увольнения?

------

Сказать - сказал. И даже 6 лет что-то делал для решения проблемы.

Но 2 Гб спагетти-кода есть 2 Гб спагетти-кода...

И что вам не нравится? Хорошо устроились (анекдот про сына адвоката). )))

#55 
alex445 свой человек27.08.21 13:58
NEW 27.08.21 13:58 
в ответ Murr 27.08.21 12:03

запрос какой-то необычный сфарганить и то нужно знать как там таблицы связаны и что там накручено

------

Это потому что ты в область ДБА влазишь.

Если не влазишь - для тебя база "плоская"...

Судя по видосам типа такого, на просторах СНГ и Восточной Европы как минимум (да и везде, похоже), все лазиют во все области во всех направлениях. Этакое броуновское движение фуллстек джуниоров по проекту.


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

Каждую следующую ведь будет найти сложнее, чем вторую-третью... хотя и проще чем первую.

Из-за возраста?

#56 
Murr патриот27.08.21 16:34
Murr
NEW 27.08.21 16:34 
в ответ alex445 27.08.21 13:58

Из-за возраста?

-----

В том числе и возраста.

Но когда тебя несколько раз подряд выкинут из шараги с формулировкой - не тянет - следующий сильно подумает надо ли тебя брать...

#57 
Murr патриот27.08.21 16:38
Murr
NEW 27.08.21 16:38 
в ответ alex445 27.08.21 13:54

И что вам не нравится?

-----

6 лет отставания в технологиях мне сильно не нравится.

Мне так же сильно не нравится спускание в унитаз 70% наработок... Я бы понял если бы взамен было предложено решение, но там лишь увечат количество спагетти... и в конце концов зашьются с модификацей оного...

#58 
AlexNek патриот27.08.21 20:00
AlexNek
NEW 27.08.21 20:00 
в ответ Murr 27.08.21 11:54
В таком, что приходилось объяснять ДБА где у него ошибка...

Я просто поражен качеством ответа на казалось бы простой вопрос. Ну да ладно - просто интересно было. спок


Это потому что ты в область ДБА влазишь.

И как интересно не влазить? Дали тебе доступ к базе с каким но непонятным описанием, что дальше?

#59 
AlexNek патриот27.08.21 20:10
AlexNek
NEW 27.08.21 20:10 
в ответ alex445 27.08.21 13:58
Судя по видосам типа такого

Краткое руководство по разработке спагетти приложения смущ

#60 
alex445 свой человек28.08.21 14:29
NEW 28.08.21 14:29 
в ответ Murr 27.08.21 16:34, Последний раз изменено 28.08.21 14:29 (alex445)
Из-за возраста?
-----
В том числе и возраста.
Но когда тебя несколько раз подряд выкинут из шараги с формулировкой - не тянет - следующий сильно подумает надо ли тебя брать...

К "не тянуть" относятся такие вещи, как отказ от сверхурочных, отказ от выполнения работы не по профилю (Алекс, мы знаем, что ты шарпист, но на следующей неделю ты будешь джавист и немного джаваскриптер), отказ от незапланированных командировок и т.п. отказы?

#61 
alex445 свой человек28.08.21 14:35
NEW 28.08.21 14:35 
в ответ AlexNek 27.08.21 20:10, Последний раз изменено 28.08.21 14:35 (alex445)
Судя по видосам типа такого
Краткое руководство по разработке спагетти приложения

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

#62 
AlexNek патриот28.08.21 14:59
AlexNek
NEW 28.08.21 14:59 
в ответ alex445 28.08.21 14:35
ни от чего не отказывался и брался за любую задачу, что ему давали

Так дело то не в этом, а в том как была организована работа и проект на фирме.

#63 
Срыв покровов коренной житель28.08.21 15:01
NEW 28.08.21 15:01 
в ответ alex445 28.08.21 14:35

ты себя как-то сильно на негатив настраиваешь

Айти это сейчас священная корова

Напомнило

https://youtu.be/HHAwtq-72-A


#64 
Murr патриот28.08.21 15:26
Murr
NEW 28.08.21 15:26 
в ответ alex445 28.08.21 14:29

"не тянуть"

-----

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


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

#65 
AlexNek патриот28.08.21 22:30
AlexNek
NEW 28.08.21 22:30 
в ответ alex445 28.08.21 14:29
К "не тянуть" относятся такие вещи, как отказ....

Слишком примитивно спок

Есть проект - "телега". Ее нужно вытянуть на гору, каждый член команды ее как то тянет. Шеф не стоит с плеткой, но очень хорошо замечает, кто, как и куда ее тянет.

Можно работать по 10 часов, писать на яве, ездить куда угодно и все равно "не тянуть".

Но это нужно хотя бы пару лет здесь отработать, чтобы врубится в принцип.

#66 
alex445 свой человек29.08.21 13:27
NEW 29.08.21 13:27 
в ответ AlexNek 28.08.21 22:30

В любом коллективе всегда найдутся самые неэффективные, независимо от того, насколько хорошо они работают. Принцип "постоянно увольняем низшие 10%" - кажется, от него такие фирмы, как Майкрософт, недавно отказались. Зачем нанимать джуниоров, если они всегда будут не тянуть по сравнению даже с миддлами? Чтобы через половину испытательного срока их уволить? Кажется, Амазон занимается "наймом под увольнение"?

#67 
AlexNek патриот29.08.21 14:33
AlexNek
NEW 29.08.21 14:33 
в ответ alex445 29.08.21 13:27
если они всегда будут не тянуть

Ну отчего же? Разный есть народ.

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

У каждого свой угол зрения и собственный опыт. У другого может все абсолютно противоположно.

#68 
1 2 3 4 все