Comments (19)
Done d4d0a6a
from vk.
А в чем был смысл перехода на версию 3.5, если можно сделать 4.0?
У 3.5 и 4.0 те же поддерживаемые платформы, то есть совместимость ни с чем не теряется.
При этом TPL и другие приятные штуки остаются, поэтому в будущем добавить асинхронные версии не составит никакого труда.
from vk.
Вопрос в том, чего мы добьемся добавив асинхронности?
Главным минусом я вижу - раздутие API, будет непонятно какой метод использовать синхронный или асинхронный. Как вариант, добавить проект VkNet.Async который будет реализовать тот же набор API, но только асинхронные версии.
Смысл перехода в поддержки наименьшей версии фраемворка. Второй уже мало где используется, а вот 3.5 еще достаточно часто, это касаемо моего опыта.
В идеале настроить нугет чтобы он билдил для каждой версии фраемворка отдельную версию библиотеки.
from vk.
Думаю что для данной либы 3.5 и 4.0 не будут иметь разницы, на 2.0 можно и нужно забить. Из позиций оптимизации лучше две версии либы для синхронного и асинхронного. Готово? :) Подскажите как фейсбук делает превью сайта и есть ли сервис "условно-бесплатный" для этого? Например, 10,000 превью в месяц бесплатно, а сто тысяч за $10-20/mo ?!
from vk.
Я заранее прошу прощения за такую простыню текста :)
Начну со второго:
3.5 еще часто используется, это да, но на мой взгляд, есть разные ситуации.
Если бы это был не VkNet, а какой-то логгер или вроде того, было бы понятно, зачем совместимость с 3.5. Ну мало ли в давно существующий проект нужно этот логгер добавить.
А VkNet, на мой взгляд, в некотором роде ядро, на котором пишется что-то новое.
Начинать новый проект на 3.5 - это как-то странно.
Добавлять VkNet в некий существующий проект на 3.5 - честно говоря, я пока не могу представить ситуацию, где это может понадобиться.
Что касается асинхронности, есть две заинтересованные стороны:
- Мы получаем больше проблем с поддержкой двух версий методов. Хотя можно вручную писать одну, а для другой написать генератор. Не самая тривиальная задача, но с некоторыми допущениями вполне решаемая.
- Пользователя это избавляет от кучи проблем. Опять же специфика VkNet: я бы использовал ее для мессенджера, аудиоплеера или типа того, других вариантов как-то не вижу. В любом случае подавляющее большинство - приложения с GUI. А там асинхронность критически важна. Особенно учитывая, что мы работаем с сетью, что уже гарантирует относительно долгое выполнение. Кстати, сейчас я пока не знаю, что будет, если с сетью проблемы. Может быть exception, а может и тупо поток зависнуть в некоторых ситуациях. Или просто связь такая, что любой ответ загружается еле-еле. В итоге:
- С асинхронными версиями пользователь имеет средства ручной отмены, таймауты, и вообще выполняет долгие операции в фоне. Опять же TPL довольно умная и умеет не создавать особых накладных расходов, связанных с потоками.
- С синхронными версиями пользователь либо сам пишет обертки для каждого метода, что, кроме кучи кода, выливается в еще некоторые специфические проблемы, очень-очень неприятные, либо его проклинают пользователи, у которых пока новые сообщения грузятся - интерфейс висит.
Кстати, я не особо разбирался, но можно сейчас VkNet использовать из Metro-приложений? Мне почему-то кажется, что нельзя, там вроде нет синхронных методов для работы с сетью.
Раздутие API - а это проблема? Дублирование кода есть, но в конце концов это просто пары методов, Name и NameAsync. Использовать будут подходящий по ситуации. Пользователь наберет Wall.Get и увидит две строки в подсказке, Get и GetAsync соответственно. Выбор вроде не так сложен.
Мое и только мое личное мнение вообще в том, что имея возможность легко писать асинхронный код (спасибо MS за TPL), синхронные версии вообще не нужны. Особенно учитывая, что скорее всего пользователю библиотеки нужна асинхронность.
В любом случае, варианта два:
- 3.5 и только синхронные методы
- 4.0 и асинхронные версии методов. Или даже 4.5. При этом теряется совместимость с Win XP, но на мой взгляд, аудитория, которой VkNet нужна на XP, очень мала и стабильно падает.
Что касается настройки nuget, вроде как это не особо сложно. Я так понял, в репозитории нет его конфигурации?
from vk.
Добавлю еще, что если 3.5 кому-то была бы нужна, были бы такие запросы. Я слежу за проектом еще с анонса на хабре, и не помню, чтобы кто-то просил 3.5 Максимум - 4.0 было. Если я не прав, прошу прощения. Кстати, на хабре, помнится, многие комментарии были про то, что async-await нужен.
Вообще, я бы поступил радикально, и версию VkNet 1.0 оставил бы как есть, исправляя только баги и добавляя только самое нужное. А параллельно перенес бы весь код в 4.5, и делал бы версию вообще без синхронных методов. Туда уже добивать все методы из API, поддерживать актуальность и т.д. И это было бы VkNet 2.0
from vk.
Хорошая идея про VkNet 2.0!
На метро она не работает, т.ч. думаю лучше всего сделать Portable Library и добавить туда только асинхронные версии.
from vk.
Тогда, наверное, лучше новый репозиторий создать рядом с этим? Я в ближайшие пару дней мог бы набросок сделать, вы не создадите рядом пустой репозиторий?
from vk.
Да, хорошо!
Т.к. главная фича асинхронность, то вот новый проект https://github.com/vknet/vknet-async
from vk.
Спасибо!
from vk.
У меня вроде доступа к новому репозиторию нет )
from vk.
Поправил, уже есть)
from vk.
Спасибо )
from vk.
Люди, мне тоже интересно участвовать в проекте, возьмете? Я C# web dev у меня startup http://qstoma.com с дизайна не ржать, те для кого он не знают :) мне он нравится. Планирую встроить интеграцию с социальными сетями т. е. буду использовать vknet. С ФБ чуть-чуть разобрался (http://qstoma.ru/fbGetInsertCode.aspx), надо с вк разобраться. Чем хотел бы заниматься - писать удобные в использовании небольшие либы над vknet. Мне все равно придется это делать в своем проекте когда начну в него внедрять vknet. Пусть это юзают и другие...
from vk.
@qart2003 Вы можете подключиться к разработке https://github.com/vknet/vknet-async :)
from vk.
Результаты
- Текущая версия библиотеки будет разрабатываться на 4ом .net framework'e
- Асинхронная версия библиотеки разрабатывается в проекте https://github.com/vknet/vknet-async
from vk.
Ребята, готов, работаю один, как подключиться к svn? :)
from vk.
и дайте установку - партийное поручение, что писать? :)
from vk.
Всё просто :)
Учиться лучше на решении практических задач, поэтому, если есть желание, то можно взяться за эту #28
Вот порядок действий:
- Сделать форк проекта.
- Скачать исходники к себе на компьютер.
- Разобраться как реализованы методы в категории PhotosCategory.
- Посмотреть как написаны тесты для этих методов, класс PhotosCategoryTests.
- Посмотреть почему не передаются данные, поправить, и написать тест.
- Сделать pull-request в проект.
- Profit :)
from vk.
Related Issues (20)
- Правильное использование DI для VkApi объекта HOT 8
- Add method to add date without translation to unixtimestamp
- message_new.action.type chat_screenshot HOT 1
- Ошибка получения payload через BotsLongPoolHistory HOT 1
- Добавить Source Link HOT 1
- `IApiAuthParams.TwoFactorAuthorizationAsync` должен иметь тип `Func<Task<string>>`, а не `Task<string>`
- AddAudioBypass HOT 2
- Unavailable for apps with direct auth.
- Добавить в Enum VkNet.Enums.StringEnums.PhotoSizeType новый тип "J"
- CarouselElement - Keyboard format is invalid: action contains unknown fields HOT 1
- VkNet.Enums.StringEnums.MessageAction chat_invite_user_by_message_request HOT 1
- MessagesCategory.DeleteAsync
- Deserialization exception when PollsCategory.GetVoters HOT 1
- messages.changeConversationMemberRestrictions HOT 1
- Support MessagePack HOT 1
- message_new.message.attachments[0].type.app_action
- Новый ActionType для MessagesAction
- Незадокументированный параметр и данные в groups.getById HOT 1
- The reader's MaxDepth of 64 has been exceeded
- New error: Too many friends HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from vk.