Рассмотрим python-uinput и evdev . Пример shift+a
с последним:
from evdev import uinput, ecodes as e
with uinput.UInput() as ui:
ui.write(e.EV_KEY, e.KEY_LEFTSHIFT, 1)
ui.write(e.EV_KEY, e.KEY_A, 1)
ui.syn()
Это действительно зависит, на которой технологии доступа к данным Вы используете. При использовании Linq Для Sql Вы могли бы хотеть абстрагировать далеко доступ к данным позади своего рода интерфейса "репозитория", такого как IProductRepository. Основной призыв к этому - то, что можно изменить определенную реализацию доступа к данным в любое время (такой при записи модульных тестов).
Я попытался покрыть часть этого здесь:
Я проверил бы видео Rob Conery на его создание витрины MVC. Ряд может быть найден здесь: Ряд Витрины MVC
Этот ряд погружается во все виды связанных с дизайном предметов, а также порядков кодирования/тестирования для использования с MVC и другими проектами.
В решении моего сайта у меня есть проект веб-приложения MVC и "общий" проект, который содержит мой POCOs (простые объекты C#), управляющие делами и уровни доступа к данным.
Классы DAL связываются с SQL Server (я не абстрагировал их), и возвратите POCOs управляющим делами, которых я звоню от своих контроллеров в проекте MVC.
Я думаю, что Архитектура Billy McCafferty S#arp является довольно хорошим примером использования ASP.NET MVC с уровнем доступа к данным (использующий NHibernate в качестве значения по умолчанию), внедрение зависимости (банкомат Ninject, но существуют планы поддерживать CommonServiceLocator), и разработка через тестирование. Платформа находится все еще в разработке, но я считаю это довольно хорошим и стабильным. С текущего выпуска должно быть немного повреждающихся изменений, пока нет финальная версия, таким образом кодирование против него должно быть хорошо.
Для нашего приложения я планирую использование LINQ к Объектам, но поскольку это плохо мне знакомо существует возможность, что я захочу заменить это в будущем, если это не будет работать, как я хотел бы и использовал бы что-то еще как LINQ к SQL или NHibernate, таким образом, я буду абстрагировать объекты доступа к данным в абстрактную фабрику так, чтобы реализация была скрыта от applicaiton.
Как Вы делаете Вам решать, пока Вы выбираете доказанный и хорошо знаете шаблон разработки для реализации, я думаю, что Ваш конечный продукт будет хорошо поддерживаться и устойчив.
Используйте LINQ. Создайте LINQ в файл SQL и перетащите все таблицы, и просматривает Вас потребность. Затем, когда Вы звоните, Ваша модель весь Ваш материал уровня CRUD создается для Вас автоволшебно.
LINQ является лучшей вещью, которую я видел в долгое долгое время. Вот некоторые простые выборки для захвата данных из блога Scott Gu.
Я просто сделал свой первый проект MVC, и я использовал шаблон разработки Сервисного Репозитория. Существует хороший бит информации об этом в сети прямо сейчас. Это сделало мой переход от Linq-> Sql к Платформе Объекта легкий. Если Вы думаете, что собираетесь быть изменением, много вставляет мало дополнительного усилия использовать Интерфейсы.
Я рекомендую Платформу Объекта для Вашего DAL/репозитория.
Проверьте Сервер Лагеря Кода для хорошего эталонного приложения, которое делает эту самую вещь и как @haacked указанный краткий обзор, который разделила липкая вещь далеко для хранения их.
Я сделал несколько приложений MVC и нашел структуру, которая работает очень хорошо для меня. Он основан на серии MVC Storefront Роба Конери , о которой упоминал JPrescottSanders (хотя ссылка, которую он опубликовал, неверна).
Итак, я обычно пытаюсь ограничить свои контроллеры, чтобы они содержали только логику представления. Это включает извлечение данных для передачи в представления и сопоставление данных, переданных обратно из представления в модель предметной области. Ключевым моментом является попытка сохранить бизнес-логику вне этого уровня.
С этой целью я обычно использую 3 уровня в моем приложении. Первый - это уровень представления - контроллеры. Второй - уровень обслуживания - этот уровень отвечает за выполнение сложных запросов, а также за такие вещи, как проверка. Третий уровень - это уровень репозитория - этот уровень отвечает за весь доступ к базе данных.
Таким образом, в вашем примере продуктов это будет означать, что у вас будет ProductRepository с такими методами, как GetProducts () и SaveProduct (продукт продукта). У вас также будет ProductService (который зависит от ProductRepository) с такими методами, как GetProductsForUser (пользователь-пользователь), GetProductsWithCategory (категория категории) и SaveProduct (товарный продукт). Здесь также могут происходить такие вещи, как проверка. Наконец, ваш контроллер будет зависеть от уровня обслуживания для получения и хранения продуктов.
Вы можете пропустить уровень обслуживания, но обычно вы обнаружите, что ваши контроллеры становятся очень толстыми и склонны делать слишком много. Я пробовал эту архитектуру довольно много раз, и она, как правило, неплохо работает, тем более что она очень хорошо поддерживает TDD и автоматическое тестирование.