Replies: 3 comments 10 replies
-
Personally, I LOVE, LOVE, LOVE what you're proposing! Partly because I think far too many COM-based implementation details have leaked into the toolkit's API itself. The whole idea initially was to have a simpler & more discoverable API than all of the existing complicated COM-based code. The API should help new extension writers to write extensions, but not preclude more advanced or custom scenarios. I was a huge supporter of the toolkit in the early days but I'd hoped that it would remain implementation-agnostic. I expected that the API would be hashed out first, then implementation(s) could follow. Unfortunately it didn't stay that way for very long. There have been a number of very clever code contributors, but I became somewhat disillusioned with some of the directions it was taking. At the same time I also suffered from debilitating chronic health problems. Problems which are unfortunately on-going. I'm already doing something similar to what you suggest (but on a much smaller scale) with my own wrapper classes around the parts of the toolkit itself. Sometimes I just want namespace/class/method names to be more logical, or consistent. I want the code that I write using the toolkit to read well, & not be unnecessarily complicated. I want my method names to tell me what it's doing, not how it's doing it! Other times I need to add functionality that's missing but may not necessarily be a good candidate for adding to the toolkit itself. Most importantly I like code to be consistent. The toolkit should definitely adhere to SOLID principles, but it has strayed from implementing them. A well thought out, user-friendly, extensible API, along with methodology that you're proposing, would enable all of what I've mentioned & more. I especially like how you suggest using dependency injection. Nobody should even need to know how the API is implemented, whether it is based the VS SDK, or not. Sometimes it might be, other times it might not. It should be also able to be extended when required, on a user by user basis, without having to fiddle around with pull requests and then have to wait for it to be accepted and then released. When I need new code, I need it NOW, not multiple days or more later. That's how I ended up doing similar to what you're suggesting on a much small scale, just for what I needed at the time. Don't get me wrong, there have been some amazing technical code contributions; code that I just couldn't have written myself because I'm not a systems engineer. I write business code around a code library (it used to be my own code, now I use the toolkit where I can). The toolkit took what I was already doing on a small scale in my code to the next level. It has, & still does, have a lot of potential. What you're suggesting would take the toolkit itself to the next level, in terms of consistency, simplicity, extensibility, & testability. If nobody else sees the benefit to what you're suggesting, I'd certainly like to be involved in what you create. |
Beta Was this translation helpful? Give feedback.
-
Can you guys explain to me in simple terms what would be the benefit when using this approach? What I personally like about the current approach is that the toolkit also includes (most of) the VS SDK packages, so my list of dependencies is relatively short. If the toolkit "surface" would be VS version independent, then I would have to add packages myself whenever I want to do something that is not handled by the toolkit. |
Beta Was this translation helpful? Give feedback.
-
Someone else that I hope might like to participate here would be @reduckted (Dave), who has contributed the greater part of the code for the current toolkit, including the very creative was of including the correct SDK classes etc. Very clever man! |
Beta Was this translation helpful? Give feedback.
-
Hello all,
This entire project already serves as an extensive abstraction over the Visual Studio SDK. Might we consider taking it one step further to its logical conclusion?
Here's the proposal:
We could create a new project providing a comprehensive abstraction over all classes, enums, etc. used in the toolkit, accessible without the need for the original SDK installation. We have four versions of the toolkit, each implementing these abstractions, with the VS class available in both static and instance implementations.
At another location, all we would need to do is extract the Visual Studio version, enabling instantiation of the correct VS instance implementation, potentially via Dependency Injection.
We could also contemplate the introduction of another base package class, capable of identifying the version and setting up accordingly.
An alternative approach could be:
Creating another project that encompasses both abstraction and wrapper classes, each selecting the appropriate version. Although I must admit, I find the initial proposal more appealing :)
So, the objective is that I can create a regular .NET 4.6/4.7/4.8 or .NET Standard 2.0 project, install the abstraction package, and work with it as usual. As long as I only need the features provided by the toolkit, there is no need to develop against a specific Visual Studio version. The specific Visual Studio version being used would then only be determined at the package initialization stage, from which the toolkit version would be identified.
Indeed, it would not only simplify the process for extensions that aim to support multiple Visual Studio versions, but also unlock more possibilities for development and implementation.
I'm also prepared to take on the task of implementing this, but I'm interested in hearing your opinions before moving forward.
So - what are your thoughts on this?
Beta Was this translation helpful? Give feedback.
All reactions