Какие Шаблоны разработки Вы реализуете в общем программировании Delphi? [закрытый]

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

Земляничный Perl, установленный правильно? Можно ли выполнить "perl" из cmd.exe?

C:\> perl -V
Summary of my perl5 (revision 5 version 10 subversion 0) configuration:
  Platform:
    osname=MSWin32, osvers=5.1, archname=MSWin32-x86-multi-thread
...

Сделал Приложение:: Ack установил правильно?

C:\> cpan App::Ack
...
Installing C:\strawberry\perl\site\lib\App\Ack.pm
Installing C:\strawberry\perl\site\lib\App\Ack\Plugin.pm
Installing C:\strawberry\perl\site\lib\App\Ack\Repository.pm
Installing C:\strawberry\perl\site\lib\App\Ack\Resource.pm
Installing C:\strawberry\perl\site\lib\App\Ack\Plugin\Basic.pm
Installing C:\strawberry\perl\bin\ack
Installing C:\strawberry\perl\bin\ack.bat
Writing C:\strawberry\perl\site\lib\auto\ack\.packlist
Appending installation info to C:\strawberry\perl\lib/perllocal.pod
  PETDANCE/ack-1.88.tar.gz
  C:\strawberry\c\bin\dmake.EXE install UNINST=1 -- OK

Если так, я не вижу, почему Вы не можете выполнить "ack" из командной строки:

C:\> ack --version
ack 1.88

Copyright 2005-2009 Andy Lester, all rights reserved.

This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.

, Если это не работает, где в той цепочке поврежденные вещи? Например, если Вы не можете выполнить "perl" из командной строки, тогда Земляника не устанавливала правильно (или не находится в Вашем ПУТИ), и необходимо будет зафиксировать это. Но иначе, ack установлен с оберткой "ack.bat" в тот же путь как "perl", поэтому если можно выполнить "perl", необходимо быть в состоянии выполнить "ack".

10
задан 4 revs, 3 users 77% 12 October 2014 в 10:01
поделиться

5 ответов

It depends. Consider the multi-master replicated case, there could be conflicting entries added there consistent within each master, but not consistent once they replicate. You might only be using one couchdb server, but in general they design it assuming a multimaster case, and don't put in any features that would only work correctly in single unreplicated server.

If you only care about the single server case the conceivably you could rebuild your couchjs with networking support and perform an http query in your validate_doc_update() function that would perform a query against the DB to see if the email address already is already used and fail the update if so. Check here for more details about the validation mechanism. I don't recommend doing that, instead I would embed all the uniqueness in the id field (either directly or via hashing) and just deal with moving the doc if the user changed anything that effected that.

type
  TComponent = class(TPersistent, ...)
    constructor Create(AOwner: TComponent); virtual;
    ...
  end;

Например, конструктор TDirectoryListBox.Create переопределяет его:

type
  TDirectoryListBox = class(...)
    constructor Create(AOwner: TComponent); override;
    ...
  end;

Вы можете сохранить ссылку на класс (аналог классу ссылки на экземпляр объекта) в переменной типа 'тип класса'. Для классов компонентов существует предопределенный тип TComponentClass в модуле Classes :

type
  TComponentClass = class of TComponent;

Когда у вас есть переменная (или параметр) типа TComponentClass, вы можете выполнять полиморфную конструкцию, которая очень похожа на шаблон фабрики:

var
  ClassToCreate: TComponentClass;

...

procedure SomeMethodInSomeUnit;
begin
  ClassToCreate := TButton;
end;

...

procedure AnotherMethodInAnotherUnit;
var
  CreatedComponent: TComponent;
begin
  CreatedComponent := ClassToCreate.Create(Application);
  ...
end;

Delphi RTL использует это, например, здесь:

Result := TComponentClass(FindClass(ReadStr)).Create(nil);

и здесь:

// create another instance of this kind of grid
SubGrid := TCustomDBGrid(TComponentClass(Self.ClassType).Create(Self));

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

Классы формы (datamodule / frame / ...) фактически имеют (опубликованный) список компонентов, которые находятся в форме (datamodule / frame / ...). При чтении файлов DFM Delphi RTL затем:

  1. находит имя экземпляра компонента,
  2. использует это имя для поиска базовой ссылки на класс,
  3. затем использует ссылку на класс для динамического создания правильного объекта

] Обычный разработчик Delphi обычно никогда не видит этого, но без этого весь опыт Delphi RAD не существовал бы.

Аллен Бауэр (главный научный сотрудник Embarcadero) написал небольшой блог также статья по этой теме . Существует также SO вопрос о , где используются виртуальные конструкторы .

Дайте мне знать, достаточно ли это освещает тему виртуального конструктора Create: -)

- -джерун

22
ответ дан 3 December 2019 в 14:11
поделиться

Я часто использую следующие шаблоны:

  1. Наблюдатель в MVC
  2. Синглтон
  3. Шаблонный метод
  4. Состояние
2
ответ дан 3 December 2019 в 14:11
поделиться

Я часто использую следующие шаблоны:

  • Команда
  • Посетитель
  • Шлюз данных таблицы
  • Наблюдатель
  • Адаптер
  • Синглтон (с большой осторожностью!)
  • Абстрактная фабрика
  • Фабричный метод
  • Состояние
  • Внедрение зависимостей во всей его форме
  • Фасад
  • Локатор службы
  • Разделенный интерфейс
2
ответ дан 3 December 2019 в 14:11
поделиться

Программирование без ООП (некоторые называют его структурным программированием) очень распространено в Программисты Delphi. Это очень просто: вы создаете функцию, которая что-то делает, и она не связана со структурой данных, подобной записи / объекту. Пример: IntToStr ()

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

2
ответ дан 3 December 2019 в 14:11
поделиться

Вы можете найти отличную статью Марко Канту об эквивалентности шаблонов GOF и идиом Delphi. Я помню, как присутствовал на его борконской сессии по этой теме, это было превосходно.
Одна основная идея, которую следует помнить, заключается в том, что шаблоны проектирования необходимы для восполнения недостатков языка / инфраструктуры. И если у вас есть родная идиома, вам не нужно изобретать колесо и реализовывать весь GOF shebang, просто научитесь распознавать его и называть его (как это сделал Йерун в своем превосходном объяснении на Factory ) .

6
ответ дан 3 December 2019 в 14:11
поделиться
Другие вопросы по тегам:

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