Пост про дизайн.

Jun 10, 2010 22:34

Большое спасибо archimag, откликнувшегося на мою предложение написать пост ( Read more... )

блоги, дизайн, ЖЖ, языки программирования, Хаскель

Leave a comment

Comments 59

lomeo June 10 2010, 21:54:01 UTC
Что-то я не понял. А что будет, если мы просто не укажем StackSlot для Maybe? Разве не то же самое?

Reply

thesz June 10 2010, 22:10:55 UTC
Почти то же самое, только кому-либо в голову может придти его указать.

Reply

lomeo June 11 2010, 04:20:25 UTC
Нужны sealed классы. Я подума.

Reply

thesz June 11 2010, 08:45:58 UTC
Можно и по другому поступить:
class StackSlots a size | a -> size
instance StackSlots Char (S Z)
instance StackSlots Int (S Z)
instance StackSlots a size => StackSlots (Maybe a) (S size)
class StackSlots a (S Z) => StackSlot a

Это даже логичней.

Reply


ext_156459 June 11 2010, 05:00:09 UTC
>сперва сравниваем дизайны по тому, как много сценариев программы они покрывают

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

>потом сравниваем по количеству кода, потребному для реализации дизайна

Крайне спорный критерий, имхо.

Reply

ext_236304 June 11 2010, 06:31:35 UTC
> Что-то не понятно. Допустим у нас есть задача с N обязательными требованиями (не знаю, допустим проверка подписи XML-документа или определение стиля шрифта для конкретного слова в HTML на основании CSS). Какие же здесь могут быть "сценарии программы" -- либо решение удовлетворяет требованиям, либо нет.

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

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

Reply


nealar June 11 2010, 08:01:52 UTC
Может, я не умею читать, но скажу грубое: я не понял задачу. Решение вижу - реализация форта, со всякими интересными свойствами. Вопрос: для чего она делается?
1. Выполнять фортовские программы?
2. Проверять фортовские программы?
3. Кодогенерить из форта?
4. Кодогенерить в форт?

Reply

thesz June 11 2010, 08:47:47 UTC
Проверять фортовские программы и генерировать форт-код.

Можно потом присоединить и кодогенерацию в Форт.

Reply

nealar June 11 2010, 10:34:06 UTC
Видимо, не любые фортовские программы, а подмножество, ведь оно не умеет DUPать флаг.

Reply

thesz June 11 2010, 20:39:56 UTC
Да, подмножество.

А зачем тебе делать dup флагу?

Reply


gaperton June 11 2010, 16:26:16 UTC
При дизайн, гришь? :)

В целом, ты все правильно понимаешь. "Дизайн" проверяется наложением на предлагаемую структуру набора юзкейсов/сценариев, и расписыванием последовательности взаимодействия элементов структуры для выполнения каждого сценария. Можно делать в уме, можно фиксировать результат в виде UML Sequence Diagram. Для начала - надо фиксировать в виде картинки, пока привычка не появится.

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

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

Reply

thesz June 11 2010, 20:37:16 UTC
Я больше высказываю критику чужих мнений, чем рассказываю, как правильно. Да и что я рассказал-то: что можно один дизайн сравнить с другим и получить результат "лучше-хуже".

А за столь развёрнутый комментарий спасибо. ;)

Reply

gaperton June 11 2010, 23:38:26 UTC
Дык, эта... "необходимость развернутых комментариев" :)

А в критерии сравнения у тебя неточность. Минимальный объем кода для текущего набора требований - хреновый критерий.

Объем кода конечно кореллирует с трудозатратами. Но минимум на практике для текущего набора требований достигается на крайне херовых дизайнах.

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

Reply

lomeo June 12 2010, 05:52:46 UTC
Косвенно от объёма кода стоимость правок зависит. Хотя согласен, что это всего лишь один из параметров и, наверное, не сильно важный. Тут ещё не определился.

За "развёрнутый комментарий" отдельное спасибо! После подобных твоих комментариев у меня многое в голове на место становится :)

Reply


Leave a comment

Up