Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.03.2013, 18:00   #1
HR-dev
Новичок
Джуниор
 
Регистрация: 20.03.2013
Сообщений: 1
По умолчанию вопрос для сеньоров

Уважаемые сеньоры, просьба оценить код:

// Вакансия: Ведущий программист СSharp (senior СSharp dev)
using System;
using System.Collections.Concurrent;
using System.Threading.Tasks;

namespace Vacancy
{
class ModernInventmentTechnologies
{
private readonly BlockingCollection<ICandidate> _queue;

public ModernInventmentTechnologies()
{
_queue = new BlockingCollection<ICandidate>();
Task.Factory.StartNew(MonitorCandid ates);
}

void Enqueue(ICandidate c)
{
_queue.Add(c);
}

void MonitorCandidates()
{
const string responsibility = @"- активное участиe в разработке интеллектуального ПО (позитронные роботы)
– разноплановые задачи - от понимания требований заказчика и построения архитектуры систем до непосредственной реализации идей в виде кода;
const string terms = @"- уровень, разнообразие и динамика задач способствуют обогащению проф.багажа
- творческая атмосфера процесса разработки помогает обнаружить новые уровни креатива в проф.мастерстве
- эквивалент усилий и вклада в разработку - достойная оплата и другие интересные возможности, которые можно обсудить непосредственно на собеседовании
- на собеседование можно подъехать в любое удобное время по предварительной договоренности, офис расположен в центральном районе Москвы;

foreach (var candidate in _queue)
{
if (CandidateSatisfies(candidate))
{
if (candidate.AgreesForTermsAndRespons ibilities(responsibility, terms))
{
candidate.WelcomeOnBoard();
continue;
}

candidate.ThankYouForYourTime("Спас ибо за Ваше время!");
continue;
}

candidate.ThankYouForYourTime("Вы-профессиональный программист? Хотите стать ещё профессиональнее? Ждём!");
}
}

bool CandidateSatisfies(ICandidate c)
{
if (c.Patterns_of_Enterprise_Applicati on_Architecture_Мартина_Фаулера_и_C LR_via_CSharp_Джеффри_Рихтера_внима тельно_изучены() &&
c.Опыт_разработки_бизнес-приложений_на_СSharp _или_C_PlusPlus_от_3_4_х_лет() &&
c.Практические_навыки_работы_с_мног опоточностью() &&
c.Знание_современных_методов_создан ия_ПО() &&
c.Представление_о_СУБД() &&
c.Высшее_техническое_образование() &&
c.Английский_на_уровне_Intermediate ())
{
return true;
}

return false;
}
}

internal interface ICandidate
{
void WelcomeOnBoard();
void ThankYouForYourTime(string message);

bool Patterns_of_Enterprise_Application_ Architecture_Мартина_Фаулера_и_CLR_ via_CSharp_Джеффри_Рихтера_внимател ьно_изучены();
bool Опыт_разработки_бизнес-приложений_на_СSharp _или_C_PlusPlus_от_3_4_х_лет();
bool Практические_навыки_работы_с_многоп оточностью();
bool Знание_современных_методов_создания _ПО();
bool Представление_о_СУБД();
bool Высшее_техническое_образование();
bool Английский_на_уровне_Intermediate() ;

bool AgreesForTermsAndResponsibilities(s tring responsibility, string terms);
}
}

с вопросами и предложениями
hr.sigma.ru at gmail.com
+7 968 7924658
HR-dev вне форума Ответить с цитированием
Старый 20.03.2013, 18:42   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Уважаемые сеньоры, просьба оценить код:
Я не сеньор, но какого чёрта типичные свойства в интерфейсе записаны как методы? CandidateSatisfies спокойно можно сократить до return c.DeclaredAbility1 && c. DeclaredAbility2 && ...
Опять же, условие выхода из цикла MonitorCandidates с высокой вероятностью не соответствует ТЗ.
И почему позитронные роботы - ПО?
Abstraction вне форума Ответить с цитированием
Старый 20.03.2013, 21:09   #3
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 822
По умолчанию

1)
Код:
new BlockingCollection<ICandidate>();
Вынести в объявление.
2) Согласен с Abstraction в
Цитата:
какого чёрта типичные свойства в интерфейсе записаны как методы
3)Требования вынес в отдельный класс, отнаследовав от абстрактного класса с полями responsibility
4)От CandidateSatisfies тошнит, упаковал бы каждое поле bool в ICandidate в класс с единым интерфейсом IЗнание, аля название-уровень знания. В интерфейсе ICandidate получал коллекцию IЗнание. Плюсы каждый кандидат имеет свои знания, есть требования со своими коллекциями IЗнание, можно спокойно уйти от таких if в linq. Так же гибкость повыситься в разы, код мониторинга будет проще и не зависеть от переменных величин. Минус-больше классов, необходимость для каждого из требований создавать коллекции IЗнаний.
5) Настораживает большое количество continue в foreach , но без форматирования текста фиг разберешь почему, может я мнителен.
Итог: Архитектура полное УГ. Реализацию перевести в linq.
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вопрос для проффесионалов sveshulek Фриланс 2 02.12.2011 20:59
Вопрос для людей, кто реально «шарит» в сфере VPN. Очень важно для меня. Sorus_Nomad Безопасность, Шифрование 5 27.10.2011 11:22
Вопрос для сообразительных. СисТемникс Компьютерное железо 2 22.06.2010 23:27