Какой ваш многократно используемый класс?
Каждый программист через некоторое время заканчивает набор служебных классов. Некоторые из них являются истинными жемчужинами программирования, и они используются повторно в нескольких ваших проектах. Например, в java:
class Separator {
private String separator;
private boolean called;
public Separator(String aSeparator) {
separator = aSeparator;
called = false;
}
@Override
public String toString() {
if (!called) {
called = true;
return "";
} else {
return separator;
}
}
}
и
public class JoinHelper {
public static <T> String join(T... elements) {
return joinArray(" ", elements);
}
public static <T> String join(String separator, T... elements) {
return joinArray(separator, elements);
}
private static <T> String joinArray(String sep, T[] elements) {
StringBuilder stringBuilder = new StringBuilder();
Separator separator = new Separator(sep);
for (T element : elements) {
stringBuilder.append(separator).append(element);
}
return stringBuilder.toString();
}
}
Что такое ваш самый повторно используемый класс?
Ответы
Ответ 1
Класс утилиты, который имеет функции ведения журнала и электронной почты. Класс расширений, содержащий методы расширения. Класс отчетности, который в основном использует веб-службу служб отчетов и позволяет легко обрабатывать отчеты как Excel, PDF и т.д.
Примеры...
1.) Класс полезности (статический)
public static void LogError(Exception ex)
{
EventLog log = new EventLog();
if (ex != null)
{
log.Source = ConfigurationManager.AppSettings["EventLog"].ToString();
StringBuilder sErrorMessage = new StringBuilder();
if (HttpContext.Current.Request != null && HttpContext.Current.Request.Url != null)
{
sErrorMessage.Append(HttpContext.Current.Request.Url.ToString() + System.Environment.NewLine);
}
sErrorMessage.Append(ex.ToString());
log.WriteEntry(sErrorMessage.ToString(), EventLogEntryType.Error);
}
}
2.) Расширения Класс
public static IEnumerable<TSource> WhereIf<TSource>(this IEnumerable<TSource> source, bool condition, Func<TSource, bool> predicate)
{
if (condition)
return source.Where(predicate);
else
return source;
}
Ответ 2
System.Object
- почти все мои типы расширяют его.
Ответ 3
Большинство повторных, но скучных:
public static void handleException(Exception e) throws RuntimeException {
if (e instanceof RuntimeException) {
throw (RuntimeException) e;
}
throw new RuntimeException(e); //NOPMD
}
Меньше скучных (также методы построения списков и наборов):
/**
* Builds a Map that is based on the Bean List.
*
* @param items Bean List items
* @param keyField Bean Field that will be key of Map elements (not null)
* @return a Map that is based on the Bean List
*/
@SuppressWarnings("unchecked")
public static <T, K> Map<K, T> buildMapFromCollection(final Collection<T> items,
boolean linkedMap,
final String keyField,
final Class<K> keyType) {
if (items == null) {
return Collections.emptyMap();
}
if (keyField == null) {
throw new IllegalArgumentException("KeyField is null");
}
final Map<K, T> result;
if (linkedMap) {
result = new LinkedHashMap<K, T>();
} else {
result = new HashMap<K, T>();
}
BeanMapper mapper = null;
for (final T item : items) {
if (mapper == null) {
mapper = new BeanMapper(item.getClass());
}
final K key = (K) mapper.getFieldValue(item, keyField);
result.put(key, item);
}
return result;
}
Ответ 4
public static short getLastDayOfMonth(short givenMonth, short givenYear)
{
short lastDay = 31;
switch (givenMonth)
{
case 4:
case 6:
case 9:
case 11:
lastDay = 30;
break;
case 2:
if ((int)givenYear % 4 == 0)
{
lastDay = 29;
}
else
{
lastDay = 28;
}
break;
}
return lastDay;
}
Ответ 5
Logger class: журнал регистрации потока управления в файле журнала.
Ответ 6
Configuration Reader/Setter: считывает конфигурацию из файла ini/xml и устанавливает среду приложения
Ответ 7
В большинстве случаев используется повторно? Хммм...
boost:: shared_ptr < > с boost:: weak_ptr < >
вероятно, наиболее многократно используется (также, вероятно, наибольшее значение коэффициента bang-for-buck)
Ответ 8
Глобалы
Просто простой класс со статическим DBConnString и несколькими другими настройками приложения.
Повторно использовать простой файл примерно в 2 дюжинах проектов, поскольку он работает с .Net
Ответ 9
A ConcurrentDictionary Я написал, что теперь я использую везде (я пишу много параллельных программ)