Результаты поиска
Лучший способ разрешить плагины для приложения PHP
Я запускаю новое веб-приложение в PHP, и на этот раз я хочу создать что-то, что люди могут расширить с помощью интерфейса плагина.
Как можно написать 'hooks' в свой код, чтобы Плагины могли прикрепляться к определенным событиям?
Хорошая STL-подобная библиотека для C
Что такое хорошие библиотеки для C с такими структурами данных, как векторы, деки, стеки, хэш-карты, древовидные карты, наборы и т. д.? Простой C, пожалуйста, и независимый от платформы.
Передача большего количества параметров в указателях функций C
Допустим, я создаю шахматную программу. У меня есть функция
void foreachMove( void (*action)(chess_move*), chess_game* game);
который вызовет действие указателя функции при каждом действительном перемещении. Это все хорошо и хорошо, но что делать, если мне нужно передать больше параметров функции действия? Например:
chess_move getNextMove(chess_game* game, int depth){
//for each valid move, determine how good the move is
foreachMove(moveHandler, game);
}
void moveHandler(chess_move* move){
//uh oh, now I need the variables "game" and "depth" from the above function
}
Переопределение указателя функции не является оптимальным решением. Функция foreachMove является универсальной, и многие различные места в коде ссылаются на нее. Нет смысла для каждой из этих ссылок обновлять свою функцию, чтобы включить в нее параметры, которые им не нужны.
Как передать дополнительные параметры вызываемой функции через указатель?
Дебаты по дизайну: каковы хорошие способы хранения и управления версионными объектами?
Я намеренно оставляю это довольно расплывчатым на первый взгляд. Я ищу обсуждения и какие вопросы важны больше, чем я ищу трудные ответы.
Я нахожусь в середине разработки приложения, которое делает что-то вроде управления портфелем. Дизайн, который у меня есть до сих пор, - это
- Проблема: проблема, которую необходимо решить
- Решение: предлагаемое решение одной или нескольких проблем
- Отношение: отношение между двумя проблемами, двумя решениями или проблемой и решением. Далее разбивается на:
- Родитель-ребенок - своего рода категоризация / иерархия дерева
- Перекрытие-степень, в которой два решения или две проблемы действительно решают одну и ту же концепцию
- Адреса-степень, в которой проблема обращается к решению
Мой вопрос касается временной природы этих вещей. Проблемы возникают, а затем исчезают. Решения имеют ожидаемую дату разрешения, но она может быть изменена по мере их разработки. Степень взаимосвязи может меняться с течением времени по мере развития проблем и решений.
Итак, вопрос: каков наилучший дизайн для версирования этих вещей, чтобы я мог получить как текущую, так и историческую перспективу своего портфолио?
Позже: возможно, я должен сделать это более конкретным вопросом, хотя ответ @Eric Beard стоит того.
Я рассмотрел три проекта баз данных. Я буду достаточно каждого, чтобы показать свои недостатки. Мой вопрос: Что выбрать, или вы можете придумать что-то лучше?
1: проблемы (и отдельно, решения) являются самореферентными в управлении версиями.
table problems
int id | string name | text description | datetime created_at | int previous_version_id
foreign key previous_version_id -> problems.id
Это проблематично, потому что каждый раз, когда я хочу новую версию, я должен дублировать всю строку, включая этот длинный столбец description .
2: Создайте новый тип отношений: версия.
table problems
int id | string name | text description | datetime created_at
Это просто перемещает отношения из таблиц проблем и решений в таблицу отношений. Та же проблема дублирования, но, возможно, немного "cleaner", так как у меня уже есть абстрактная концепция отношений.
3: Используйте более Субверсионную структуру; переместите все атрибуты проблемы и решения в отдельную таблицу и версируйте их.
table problems
int id
table attributes
int id | int thing_id | string thing_type | string name | string value | datetime created_at | int previous_version_id
foreign key (thing_id, thing_type) -> problems.id or solutions.id
foreign key previous_version_id -> attributes.id
Это означает, что для загрузки текущей версии проблемы или решения я должен извлечь все версии атрибута, отсортировать их по дате, а затем использовать самую последнюю. Это может быть не так уж и страшно. Что кажется мне действительно плохим, так это то, что я не могу проверить эти атрибуты в базе данных. Этот столбец value должен быть свободным текстом. Я могу сделать столбец name ссылкой на отдельную таблицу attribute_names , которая имеет столбец type ,но это не заставляет правильный тип в таблице attributes .
еще позже: ответ на комментарии @Eric Beard о внешних ключах с несколькими таблицами:
Увы, то, что я описал, является упрощенным: есть только два типа вещей (проблемы и решения). На самом деле у меня есть около 9 или 10 различных типов вещей, поэтому у меня будет 9 или 10 столбцов внешних ключей под вашей стратегией. Я хотел использовать наследование одной таблицы, но эти вещи имеют так мало общего, что было бы крайне расточительно объединять их в одну таблицу.
Как вы делаете системную интеграцию?
Мне интересно, как разные люди решают интеграцию систем. У меня есть ощущение, что в последние годы все больше и больше работы ушло на интеграцию систем и что потребность в такого рода работе также будет возрастать.
Мне интересно, решаете ли вы ее, разрабатывая свои собственные небольшие сервисы, которые затем подключаются, или используете какой-то продукт (WebSphere, BizTalk, мул и т. д.). Я также думаю, что было бы интересно узнать, как такие решения управляются и поддерживаются (как вы решаете проблемы безопасности, инструментирования и т. д.), Какие проблемы вы испытывали с вашим решением и так далее.
Структура пространства имен / решения
Я прошу прощения за то, что задаю такой обобщенный вопрос, но это то, что может оказаться сложным для меня. Моя команда собирается приступить к большому проекту, который, как мы надеемся, объединит все случайные одноразовые кодовые базы, которые развивались на протяжении многих лет. Учитывая, что этот проект будет охватывать стандартизацию логических сущностей по всей компании ("Customer", "Employee"), малые задачи, большие задачи, которые управляют малыми задачами, и коммунальные службы, я изо всех сил пытаюсь найти лучший способ структурировать пространства имен и структуру кода.
Хотя я думаю, что не даю вам достаточно подробностей, чтобы продолжать, у вас есть какие-либо ресурсы или советы о том, как подходить к разделению ваших доменов логически ? Если это поможет, большая часть этой функциональности будет раскрыта через веб-службы, и мы-Магазин Microsoft со всеми последними вещами и гаджетами.
- Я обсуждаю одно крупное решение с подпроектами, чтобы сделать ссылки проще, но не будет ли это слишком громоздким?
- Следует ли мне свернуть устаревшую функциональность приложения или оставить ее полностью агностичной в пространстве имен (например, сделать класс
OurCRMProduct.Customerпо сравнению с общим классомCustomer)? - Должен ли каждый сервис / проект иметь свои собственные
BALиDAL, или это должен быть совершенно отдельный assembly, на который ссылается все?
У меня нет опыта в организации таких далеко идущих проектов, только разовые, поэтому я ищу любые рекомендации, которые могу получить.
Как вы начинаете проектировать большую систему?
Мне уже говорили, что я буду единственным разработчиком большой новой системы. Помимо всего прочего, я буду разрабатывать UI и схему базы данных.
Я уверен, что получу некоторые указания, но мне хотелось бы иметь возможность сбить их с ног. Что я могу сделать за это время, чтобы подготовиться, и что мне нужно будет иметь в виду, когда я сяду за свой компьютер со спецификацией?
Несколько вещей, которые нужно иметь в виду: я студент колледжа на моей первой настоящей работе по программированию. Я буду использовать Java. У нас уже есть SCM настроенных с автоматизированным тестированием, etc...so инструментов не проблема.
VS.NET Схемы Применения
Использовали ли вы схемы приложений и систем VS.NET Architect Edition для начала разработки решения?
Если да, то нашли ли вы его полезным? Функция "automatic implementation" работала нормально?
Agile архитектуры
Я начинаю свою дипломную работу, и тема будет "agile architectures"
В основном, он будет начинаться с описания традиционных методологий разработки программного обеспечения и последующего рождения методологий agile, заканчивая рекомендациями и дизайном гибкой архитектуры приложений, легко адаптируемой к присущим изменениям в программном обеспечении.
Мой вопрос в том, какие шаблоны и методы проектирования вы бы порекомендовали для такой архитектуры? Меня интересуют шаблоны, которые позволяют максимизировать развязку классов, такую как инъекция зависимостей, высокая ремонтопригодность и максимальная абстракция от конкретной проблемы.
Опыт работы с документацией об архитектуре Shared Nothing
Есть ли у вас какой-либо опыт проектирования реальной архитектуры совместного использования? У вас есть какие-нибудь показания, чтобы рекомендовать меня?
Как вы передаете сообщения/ошибки уровня обслуживания на более высокие уровни с помощью MVP?
В настоящее время я пишу приложение ASP.Net от UI вниз. Я внедряю архитектуру MVP, потому что я устал от Winforms и хотел чего-то, что имело лучшее разделение проблем.
Таким образом, с MVP презентатор обрабатывает события, вызванные представлением. Вот некоторый код, который у меня есть, чтобы иметь дело с созданием пользователей:
public class CreateMemberPresenter
{
private ICreateMemberView view;
private IMemberTasks tasks;
public CreateMemberPresenter(ICreateMemberView view)
: this(view, new StubMemberTasks())
{
}
public CreateMemberPresenter(ICreateMemberView view, IMemberTasks tasks)
{
this.view = view;
this.tasks = tasks;
HookupEventHandlersTo(view);
}
private void HookupEventHandlersTo(ICreateMemberView view)
{
view.CreateMember += delegate { CreateMember(); };
}
private void CreateMember()
{
if (!view.IsValid)
return;
try
{
int newUserId;
tasks.CreateMember(view.NewMember, out newUserId);
view.NewUserCode = newUserId;
view.Notify(new NotificationDTO() { Type = NotificationType.Success });
}
catch(Exception e)
{
this.LogA().Message(string.Format("Error Creating User: {0}", e.Message));
view.Notify(new NotificationDTO() { Type = NotificationType.Failure, Message = "There was an error creating a new member" });
}
}
}
У меня есть моя основная проверка формы, выполненная с использованием встроенных элементов управления проверкой .Net, но теперь мне нужно проверить, что данные достаточно удовлетворяют критериям для уровня сервиса.
Допустим, могут отображаться следующие сообщения уровня сервиса:
- Учетная запись электронной почты уже существует (сбой)
- Ссылка на введенного пользователя не существует (сбой)
- Длина пароля превышает допустимую длину хранилища данных (сбой)
- Участник создан успешно (success)
Предположим также, что на уровне сервиса будет больше правил, которые UI не может предвидеть.
В настоящее время у меня есть уровень сервиса, который бросает исключение, если все пошло не так, как планировалось. Это достаточная стратегия? Этот код пахнет для вас, ребята? Если бы я написал такой уровень сервиса, вы были бы раздражены необходимостью писать докладчиков, которые используют его таким образом? Коды возврата кажутся слишком старой школой, и bool просто недостаточно информативен.
Редактировать не по OP: слияние в последующих комментариях, которые были опубликованы в качестве ответов OP
Cheekysoft, мне нравится концепция a ServiceLayerException. У меня уже есть глобальный модуль исключений для исключений, которые я не ожидаю. Считаете ли вы, что все эти пользовательские исключения утомительны? Я думал, что ловить базовый класс исключений было немного вонючим, но не был точно уверен, как продвигаться оттуда.
tgmdbm, мне нравится умное использование выражения lambda там!
Спасибо Cheekysoft за последующие действия. Поэтому я предполагаю, что это будет стратегия, если вы не возражаете, чтобы пользователь отображал отдельную страницу (Я в первую очередь веб-разработчик), если исключение не обрабатывается.
Однако, если я хочу вернуть сообщение об ошибке в том же представлении, где пользователь представил данные, вызвавшие ошибку, мне придется поймать исключение в Презентаторе?
Вот как выглядит CreateUserView, когда ведущий обработал ServiceLayerException:
Для такого рода ошибок, это хорошо, чтобы сообщить об этом в том же представлении.
В любом случае, я думаю, что сейчас мы выходим за рамки моего первоначального вопроса. Я поиграю с тем, что вы опубликовали, и если мне понадобится дополнительная информация, я отправлю новый вопрос.
Как вы определились между WISA и LAMP?
Приходилось ли вам когда-нибудь выбирать между WISA или LAMP в начале веб-проекта?
Хотя плюсы и минусы разбросаны по всей сети, было бы полезно узнать о вашем реальном опыте в разработке критериев w/, оценке, принятии решений и размышлении о вашем решении перейти на любую платформу w/.
Как создать подключаемую программу Java?
Я хочу создать программу Java, которая может быть расширена с помощью плагинов. Как я могу это сделать и где я должен искать?
У меня есть набор интерфейсов, которые плагин должен реализовать, и он должен быть в jar. Программа должна следить за новыми банками в относительной (к программе) папке и регистрировать их каким-то образом.
Хотя мне нравится Eclipse RCP, я думаю, что это слишком много для моих простых потребностей.
То же самое относится и к Spring, но так как я все равно собирался посмотреть на него, я мог бы попробовать.
Но все же я предпочел бы найти способ создать свой собственный плагин "framework" как можно проще.
Лучшая архитектура для обработки изменений файловой системы?
Вот такой сценарий:
Я пишу приложение, которое будет следить за любыми изменениями в определенном каталоге. Этот каталог будет заполнен тысячами файлов в минуту каждый с "almost" уникальным GUID. Формат файла такой:
GUID.dat где GUID = = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx (внутреннее содержимое не имеет отношения, но это просто текстовые данные)
Мое приложение будет представлять собой форму, которая имеет одно текстовое поле, которое показывает все файлы, которые добавляются и удаляются в режиме реального времени. Каждый раз, когда появляется новый файл, я должен обновить textbox с этим файлом, но сначала я должен убедиться, что этот полу-уникальный GUID действительно уникален, если это так, обновите textbox с этим новым файлом.
Когда файл удаляется из этого каталога, убедитесь, что он существует, а затем удалите его, обновите textbox соответствующим образом.
Проблема в том, что я использую его .NET filewatcher и кажется, что есть внутренний буфер, который взрывается каждый раз, когда входит (buffersize + 1)-й файл. Я также попытался сохранить внутренний список в своем приложении и просто добавить каждый файл, который входит, но позже выполните проверку unique-GUID, но без кубиков.
Руководство по выбору между REST и SOAP услугами?
Есть ли у кого-нибудь ссылки на документацию или руководства по принятию решения между REST и SOAP? Я понимаю и то, и другое, но ищу некоторые ссылки на ключевые моменты принятия решений, например, безопасность, которые могут заставить вас склониться к тому или иному.
Разделить класс доступа к данным на читателя и писателя или объединить их?
Это может быть на стороне "discussy", но я действительно хотел бы услышать Ваше мнение об этом.
Ранее я часто писал классы доступа к данным, которые обрабатывали как чтение, так и запись, что часто приводило к плохому именованию, например FooIoHandler и т. д. Эмпирическое правило, что классы, которые трудно назвать, вероятно, плохо разработаны, предполагает, что это не очень хорошее решение.
Итак, я недавно начал разделять доступ к данным на FooWriter и FooReader, что приводит к более приятным именам и дает некоторую дополнительную гибкость, но в то же время мне нравится держать его вместе, если классы не большие.
Является ли разделение читателя / писателя лучшим дизайном, или я должен их объединить? Если я должен объединить их, Какого черта я должен назвать класс?
Спасибо /Erik