Обновите mysql таблицу данными из другой таблицы

Дизайн> Реализация

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

Объект - это совокупность данных и поведения.

Итак, ваши первые вопросы должны быть:

  • Какие данные этот объект содержится в модели, которую я создаю?
  • Какое поведение этот объект проявляет в этой модели? [ 1111]
  • Как это может измениться в будущем?

Имейте в виду, что наследование подразумевает отношение «isa» (a), тогда как композиция подразумевает «имеет» (hasa) связь. Выберите правильный вариант для вашей ситуации в своем представлении, учитывая, что ситуация может измениться по мере развития вашего приложения.

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

Это не то, что каждый делает сознательно на этом уровне в повседневной кодировке. Но если вы обдумываете такую ​​тему, вы стучите в проектные воды. Осознание этого может быть освобождением.

Рассмотрим конструкторские особенности

Взгляните на список & lt; T & gt; и IList & lt; T & gt; на MSDN или Visual Studio. Посмотрите, какие методы и свойства они выставляют. Считаете ли вы, что эти методы выглядят так, как будто кто-то хочет сделать с FootballTeam на ваш взгляд?

Does footballTeam.Reverse () имеет для вас смысл? Будет ли footballTeam.ConvertAll & lt; TOutput & gt; () выглядеть так, как вы хотите?

Это не спорный вопрос; ответ может быть действительно «да». Если вы реализуете / наследуете List & lt; Player & gt; или IList & lt; Player & gt ;, вы застряли с ними; если это идеально для вашей модели, сделайте это.

Если вы решите «да», это имеет смысл, и вы хотите, чтобы ваш объект обрабатывался как коллекция / список игроков (поведение), и поэтому вы хотите реализовать ICollection или IList, во что бы то ни стало. Понятно:

class FootballTeam : ... ICollection<Player>
{
    ...
}

Если вы хотите, чтобы ваш объект содержал коллекцию / список игроков (данных), и поэтому вы хотите, чтобы коллекция или список являлись свойством или членом, непременно сделайте это. Понятно:

class FootballTeam ...
{
    public ICollection<Player> Players { get { ... } }
}

Возможно, вы захотите, чтобы люди могли только перечислять множество игроков, а не считать их, добавлять к ним или удалять их. IEnumerable & л; Игрок & GT; является вполне допустимым вариантом для рассмотрения.

Вы можете почувствовать, что ни один из этих интерфейсов не является полезным в вашей модели вообще. Это менее вероятно (IEnumerable & lt; T & gt; полезен во многих ситуациях), но это все еще возможно.

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

Перейдите к реализации

. Когда вы решите данные и поведение, вы можете принять решение о реализации. Это включает в себя конкретные классы, от которых вы зависите от наследования или композиции.

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

Эксперимент с мыслями

Искусственный пример: как отмечали другие, команда не всегда является «просто» коллекцией игроков. Поддерживаете ли вы коллекцию партитур для команды? Является ли команда взаимозаменяема с клубом, в вашей модели? Если это так, и если ваша команда является коллекцией игроков, возможно, она также является коллекцией персонала и / или коллекцией баллов. Тогда вы закончите:

class FootballTeam : ... ICollection<Player>, 
                         ICollection<StaffMember>,
                         ICollection<Score>
{
    ....
}

Несмотря на дизайн, на данном этапе C # вы не сможете реализовать все это путем наследования из List & lt; T & gt; так или иначе, поскольку C # "only" поддерживает одиночное наследование. (Если вы пробовали этот malarky в C ++, вы можете считать это хорошим делом). Реализация одной коллекции через наследование и одна с помощью композиции, вероятно, показала грязной. И такие свойства, как Count, становятся запутанными для пользователей, если вы явно не реализуете ILIst & lt; Player & gt; .Count и IList & lt; StaffMember & gt; .Count и т. Д., А затем они просто болезненны, а не запутывают. Вы можете видеть, где это происходит; (а также правильно или неправильно, ваши коллеги могут также, если бы вы реализовали его таким образом!)

Короткий ответ (слишком поздно)

. Руководство по не наследованию классов коллекций не является специфичным для C #, вы найдете его на многих языках программирования. Получается мудрость, а не закон. Одна из причин заключается в том, что на практике считается, что композиция часто выигрывает над наследованием с точки зрения понятности, реализуемости и ремонтопригодности. Чаще всего с объектами реального мира / домена можно найти полезные и последовательные отношения «hasa», чем полезные и последовательные отношения «isa», если вы не вникаете в абстрактные, особенно с течением времени и точные данные и поведение объектов в коде изменения. Это не должно заставлять вас всегда исключать наследование из классов коллекции; но это может быть наводящим на размышления.

39
задан linuxbuild 5 February 2011 в 11:13
поделиться

2 ответа

Просто мало изменения и Вы получили его:

UPDATE book_details
SET live = 1 
WHERE ISBN13 in (SELECT ISBN13 FROM book_details_old WHERE live = 1);
17
ответ дан Ricardo Acras 27 November 2019 в 02:00
поделиться
UPDATE book_details AS bd, book_details_old AS old
SET bd.live=1  
WHERE bd.isbn13=old.isbn13  
AND old.live=1;
23
ответ дан castis 27 November 2019 в 02:00
поделиться
Другие вопросы по тегам:

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