Здравствуйте!
Хочу собрать библиотеку, реализующую несколько функциональностей, объединённых общей инфраструктурой. Основные возможности такие:
Множественное наследование
Декларативное описание структуры данных
Работа с различными потоками для обеспечения отзывчивости интерфейса.
Проверка правильности (непротиворечивости) состояния программы в Runtime для выявления ошибок на ранней стадии
В случае обнаружения ошибок автоматический откат сделанных изменений к последнему верному состоянию.
Элементы реактивного программирования
Расширенные события
Всё должно легко интегрироваться с существующими системами.
Наработки есть (клиент-серверная прога. клиент на C#, сервер на PHP/MySQL).
У меня возникли вопросы:
Как должен быть оформлен код? Сейчас в проге почти нет комментариев. Должны ли комментарии быть на английском языке?
Идентификаторы названы как в нотации явы (методы и свойства с маленькой буквы). Нужно ли переделывать под .NET стиль.
Каким хостингом кода можно воспользоваться?
Где посмотреть аналогичные проекты?
Одиночное наследование — это всего лишь частный случай множественного наследования.
Расскажи вкратце, как ты это собираешься делать, если не с помощью интерфейсов.
ZS>Декларативное описание структуры данных ZS>Работа с различными потоками для обеспечения отзывчивости интерфейса. ZS>Проверка правильности (непротиворечивости) состояния программы в Runtime для выявления ошибок на ранней стадии
ZS>В случае обнаружения ошибок автоматический откат сделанных изменений к последнему верному состоянию.
Т.е. ты лично хочешь реализовать Software Transactional Memory или в применении к .NET — альтернативную .NET Framework enabled for STM?
ZS>Элементы реактивного программирования ZS>Расширенные события ZS>
Enterprise Lib и .NET 4 уже смотрел?
Здравствуйте, ZagSer168, Вы писали:
ZS>Как должен быть оформлен код? Сейчас в проге почти нет комментариев. Должны ли комментарии быть на английском языке?
На первом месте должен быть понятный сам код и названия классов и методов. Если рядом с вызовом метода вы собираетесь написать комментарий, то задумайтесь — может переименовать метод так, чтобы стало понятно без комментария? Комментарии очень желательно на английском. Представьте что вы скачали исходники библиотеки а там комментарии иероглифами.
ZS>Идентификаторы названы как в нотации явы (методы и свойства с маленькой буквы). Нужно ли переделывать под .NET стиль.
Скажем так, меня немного раздражает когда я встречаю C# библиотеки, у которых используется конвенция именования из java или еще хуже из Дельфи — т.е. типа TReportGenerator =)
Re[2]: Библиотека на C#
От:
Аноним
Дата:
27.04.10 12:20
Оценка:
Здравствуйте, denisio_mcp, Вы писали:
ZS>> ZS>>Множественное наследование _>Расскажи вкратце, как ты это собираешься делать, если не с помощью интерфейсов.
Именно с помощью интерфейсов. На C# по-другому никак. Смысл такой: на вход некоторого метода передаётся тип интерфейса, содержащего только свойства. Интерфейс рефлексией анализируется. Затем динамически с помощью Emit генерируется класс, реализующий этот интерфейс. Все свойства реализуются так же, как авто-свойства в C#, перед записью в свойство происходит несколько проверок и вызов события PropertyChanged. Вместо методов класса используются методы расширения. Если надо полиморфизм (виртуальные методы), то они делаются вручную в отдельных классах-синглтонах. Это по большей части уже реализовано.
_>Т.е. ты лично хочешь реализовать Software Transactional Memory или в применении к .NET — альтернативную .NET Framework enabled for STM? _>Enterprise Lib и .NET 4 уже смотрел?
Здравствуйте, MozgC, Вы писали:
MC>На первом месте должен быть понятный сам код и названия классов и методов. Если рядом с вызовом метода вы собираетесь написать комментарий, то задумайтесь — может переименовать метод так, чтобы стало понятно без комментария? Комментарии очень желательно на английском. Представьте что вы скачали исходники библиотеки а там комментарии иероглифами.
MC>Скажем так, меня немного раздражает когда я встречаю C# библиотеки, у которых используется конвенция именования из java или еще хуже из Дельфи — т.е. типа TReportGenerator =)
Да. Я тоже склоняюсь что лучше сразу дать понятные имена и использовать общепринятые способы оформления, чем потом мучиться, когда исправить уже поздно.
Одиночное наследование — это всего лишь частный случай множественного наследования.
Здравствуйте, denisio_mcp, Вы писали:
_>Т.е. ты лично хочешь реализовать Software Transactional Memory или в применении к .NET — альтернативную .NET Framework enabled for STM?
Посмотрел. STM сходно с тем, что я хочу. Однако, способ реализации мне не нравится:
1. Нет контроля за тем, какие данные используются внутри транзакции. В больших и сложных программах это приведёт к непреднамеренному участию в транзакции лишних переменных и частым "откатам" к предыдущему состоянию. Думаю, что нужно явно укзывать какие данные блокируются и как (чтение/запись).
2. В STM версионность памяти распространяется по-умолчанию на всё подряд, но в действительности это нужно делать только для объектов, хранящих состояние системы (это особенно важно при функциональном стиле программирования, когда переменных состояния мало). В моё случае версионность используется для декларативно описанных объектов.
_>Enterprise Lib
В ней из похожего нашёл только Validation. Но в Enterprise Lib Validation используется, в основном, для проверки пользовательского ввода. В моей библиотеке — для выявления логических ошибок в самой программе.
Одиночное наследование — это всего лишь частный случай множественного наследования.
Здравствуйте, ZagSer168, Вы писали:
ZS>Посмотрел. STM сходно с тем, что я хочу. Однако, способ реализации мне не нравится: ZS>1. Нет контроля за тем, какие данные используются внутри транзакции. В больших и сложных программах это приведёт к непреднамеренному участию в транзакции лишних переменных и частым "откатам" к предыдущему состоянию. Думаю, что нужно явно укзывать какие данные блокируются и как (чтение/запись).
Думаю не "всё подряд", а на те данные, которые действительно изменились в транзакции, дабы их можно было бы откатить. Если этого не делать — будет несогласованное состояние.
Здравствуйте, denisio_mcp, Вы писали:
_>Думаю не "всё подряд", а на те данные, которые действительно изменились в транзакции, дабы их можно было бы откатить. Если этого не делать — будет несогласованное состояние.
В иногда нужно, чтобы некоторые данные не попадали под версионность. Казалось бы, это очень просто: меняй эти данные вне границ транзакции. Но часто это невозможно. Пример: Отобразить динамически меняющийся список неких объектов. Для этого нужно: а)перечислить элементы списка; б) подписаться на событие изменения списка. Причём эти действия приходится выполнять в одной тразнакции, т.к. между ними список может измениться. Подписка на событие в .NET — это запись данных в делегат. Как вынести эту операцию за пределы транзакции непонятно. Усугубляет проблему то, что STM заменяет стандартные методы синхронизации, а не дополняет их.
И вообще в STM for .NET подписка на 1 событие из 2 разных потоков обязательно ведёт к откату текущей транзакции в одном из них.
Одиночное наследование — это всего лишь частный случай множественного наследования.
Исправил нотацию на .NET.
Переименовал название классов и методов так, чтобы было понятно без чтения документации.
Написал XML-комментарии на английском.
Также реализовал распараллеливание проверки состояния. Тестовый код на 4-х ядерном компе стал работать в 3,6 раза быстрее.
Разместил пока тут: http://u168.webhop.net:81/Project/GetSelbat.ashx?mode=latest
Одиночное наследование — это всего лишь частный случай множественного наследования.
Здравствуйте, ZagSer168, Вы писали:
ZS>Всё должно легко интегрироваться с существующими системами. ZS>Наработки есть (клиент-серверная прога. клиент на C#, сервер на PHP/MySQL). ZS>У меня возникли вопросы:
ZS>Каким хостингом кода можно воспользоваться?
Здравствуйте, sergey_shandar, Вы писали:
_>Здравствуйте, ZagSer168, Вы писали:
ZS>>Всё должно легко интегрироваться с существующими системами. ZS>>Наработки есть (клиент-серверная прога. клиент на C#, сервер на PHP/MySQL). ZS>>У меня возникли вопросы:
ZS>>Каким хостингом кода можно воспользоваться?
_>Пробовал разные: sourceforge.net, developer.berlios.de, assembla.com, code.google.com. Для .NET проектов рекомендую codeplex.com.
Можете уточнить, на каких критериях основан ваш выбор?
Объективные: Очень много других .NET проектов хостятся на codeplex;
Cборы от рекламы идут разработчикам проектов;
Поддержка Mercurial.
Субъективные: Простой понятный дизайн.
Некоторые причины могут быть историческими, например, с sourceforge на berlios.de я перешел тогда, когда berlios.de поддерживал Subversion, а sourceforge еще нет.
Здравствуйте, sergey_shandar, Вы писали:
_>Здравствуйте, ZagSer168, Вы писали:
ZS>>Всё должно легко интегрироваться с существующими системами. ZS>>Наработки есть (клиент-серверная прога. клиент на C#, сервер на PHP/MySQL). ZS>>У меня возникли вопросы:
ZS>>Каким хостингом кода можно воспользоваться?
_>Пробовал разные: sourceforge.net, developer.berlios.de, assembla.com, code.google.com. Для .NET проектов рекомендую codeplex.com.
Спасибо, посмотрю.
Одиночное наследование — это всего лишь частный случай множественного наследования.
Реализовал важную, но непростую вещь — межгрупповые события. Это когда объект-инициатор события и подписчик находятся в разных группах. Сохраняется правильная работа Undo/Redo при возникновении исключений. Удалось избежать лишней сложности в коде при использовании таких событий
В тестовой программе перевёл схему данных на использование этой библиотеки
Исправил ошибки... разные