Шаблоны, лучшие практики и чистый код

Я использую.NET 2.0 и 3.5, и она в состоянии установить обоих дата сборки и номер сборки. В то время как панель справки говорит, что, если.NET, которой уже позволяют, установила ее, это будет использовать случайное число для пересмотра, который не верен, она на самом деле помещает информацию о дате/времени, которая может быть легко извлечена, который подтвержден документами онлайн: http://msdn.microsoft.com/en-us/library/system.reflection.assemblyversionattribute.assemblyversionattribute.aspx

Видит этот блог: http://dotnetfreak.co.uk/blog/archive/2004/07/08/determining-the-build-date-of-an-assembly.aspx?CommentPosted=true#commentmessage

я хочу установить версию сборки сам, но все еще хотеть автоматическую метку даты и времени, таким образом, я использую что-то вроде этого для AssemblyVersion ("1.0.*")

Вот демонстрационная функция для извлечения даты/времени сборки

private System.DateTime BuildDate()
{

//This ONLY works if the assembly was built using VS.NET and the assembly version attribute is set to something like the below. The asterisk (*) is the important part, as if present, VS.NET generates both the build and revision numbers automatically.
// 
//Note for app the version is set by opening the 'My Project' file and clicking on the 'assembly information' button. 
//An alternative method is to simply read the last time the file was written, using something similar to:
//Return System.IO.File.GetLastWriteTime(System.Reflection.Assembly.GetExecutingAssembly.Location)

//Build dates start from 01/01/2000

System.DateTime result = DateTime.Parse("1/1/2000");

//Retrieve the version information from the assembly from which this code is being executed

System.Version version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;

//Add the number of days (build)

result = result.AddDays(version.Build);

//Add the number of seconds since midnight (revision) multiplied by 2

result = result.AddSeconds(version.Revision * 2);

//If we're currently in daylight saving time add an extra hour

if (TimeZone.IsDaylightSavingTime(System.DateTime.Now, TimeZone.CurrentTimeZone.GetDaylightChanges(System.DateTime.Now.Year)))
{
    result = result.AddHours(1);
}

return result;

}

7
задан Rudy 10 October 2009 в 19:30
поделиться

7 ответов

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

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

Я думаю, что это тоже «трудность». Шаблоны дают вам рамку, точку, с которой нужно начинать, когда вы сталкиваетесь с проблемой. Пример: вы действительно хотите провести модульное тестирование своего кода, но у вас просто нет возможности, потому что это зависит от логики пользовательского интерфейса или слишком тесно связано. Это ваша проблема, поэтому вы можете найти решение, зная о шаблоне MVC и концепции внедрения зависимостей и IOC. Они могут дать вам отправную точку, так как MVC, например, объясняет вам концепции высокого уровня, такие как Observer, Observable, Controller view и т. Д., И как они связаны друг с другом. Тогда ваша задача как хорошего программиста - выбрать правильный подход и в какой степени вы сочтете разумным применить этот шаблон. Не применяйте его просто потому, что вам подсказывает узор. Помните, что это просто рамка, вы можете изменить и адаптировать ее

16
ответ дан 6 December 2019 в 06:50
поделиться

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

Хороший объект на основе шаблонов ориентированный дизайн имеет множество маленьких, очень специализированных классов. Самые простые функции могут касаться многих классов. Из-за этого на изучение / понимание дизайна уходит много времени. Преимущество такой «хорошо факторизованности» состоит в том, что код легко поддерживать - небольшое изменение требований обычно требует небольшого локализованного изменения кода.

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

5
ответ дан 6 December 2019 в 06:50
поделиться

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

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

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

Придерживайтесь подхода YAGNI (он вам не понадобится). Это не значит, что вы никогда не думаете о своем дизайне. Скорее, that people have dealt with these issues before. But is it law? We owe it to ourselves to think and understand for ourselves." - Rob Conery

2
ответ дан 6 December 2019 в 06:50
поделиться

Я думаю, что отчасти проблема связана с примерами в книгах.

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

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

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

2
ответ дан 6 December 2019 в 06:50
поделиться

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

1
ответ дан 6 December 2019 в 06:50
поделиться

IIABDFI. Если он не сломался, не чините его.

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

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

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

0
ответ дан 6 December 2019 в 06:50
поделиться

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

, отвечая на ваш вопрос. да, есть люди, которые думают, что могут применять шаблоны. но иногда они ' повторяют образец, который не соответствует их проблеме. Я люблю говорить, что все инструменты лучше всего подходят для того, для чего они предназначены. Итак, выкройки такие же. если вы не уверены, лучше поговорите со своим архитектором. поищите лучшие практики, почему используются шаблоны, какие возможности / трудности это даст? Разве это не накладные расходы? будет ли код по-прежнему читаемым и поддерживаемым? если «Да», то продолжайте.

0
ответ дан 6 December 2019 в 06:50
поделиться