Comments (3)
I've gone back and forth on this particular point quite a bit. The same could be said regarding the MongoDB implementation as well as any future implementations. There are basically three options:
- ILMerge and internalize everything
- ILMerge, but don't internalize
- Don't ILMerge the assembly at all.
There are different pros and cons to each step. The current strategy is to merge but leave them visible so that you can access the full power of the Raven client code. If I internalize you don't get that and you're limited but it can cause conflicts.
I've got two ideas on the matter:
- Internalize it but provide enough knobs to make it configurable.
- Don't internalize so that it can use the implementation in the bin directory and the caller has all of the advanced options available.
Thoughts?
from neventstore.
My preference is to not ILMerge at all (option 3). I think having classes public from multiple assemblies (option 2) causes too many problems, conflicts and confusion and makes working with EventStore more difficult than it should be (more of a .NET issue though). I'm using MongoDB in other parts of the app and end up 'referencing' it from the one in the EventStore assembly which doesn't feel right.
I'm not sure how MongoDB would handle the serialization registration with (option 1) - it may cause issues, I'd have to look into it more but that would be my second choice option.
I think all that the ILMerge really gives you is a distribution that appears a little tidier and removes any issues where specific versions of the drivers may be required. The worst case (again, with MongoDB) is that the driver is updated to support some new feature of MongoDB (but doesn't impact EventStore) and because it's ILMerged it means I need to start re-building the EventStore and CommonDomain to update the driver which is the main reason I'd like to have it separate.
I'm sure I'm doing it wrong and should be able to sort out the referencing and have different driver versions in use at the same time but then I risk hitting issues with the serialization.
from neventstore.
I tend to agree with CaptainCodeman.
ILMerging external dependencies makes it easy to add the right reference to the project - especially for new users, results in less assemblies but when you hit the wall of conflicts between them it's not fun anymore.
ILMerging only main project with it's dependent projects and no external dependencies gives you most of the good parts without the bad parts. Adding a conditional reference to a .cproj is a pain (i've learned how to do it from your prjs, thanks) but you don't have to do it every day.
Not merging assemblies with external, common, dependencies (Raven,Mongo,NHibernate) will probably cause the least amount o trouble on the long run.
I think that having a build script for unmerged assemblies might be usefull.
Thanks for your time,
Iulian
from neventstore.
Related Issues (20)
- Paging over all events HOT 4
- Iterating over all streams HOT 2
- Docs out of date?
- Changelog clarification: Serialization/Data format changes between 5.2.0 and newer HOT 3
- Missing Firebird Sql as a Supported Persistence Engine HOT 2
- NEventStore constraint failed with MySql 8.x (works with 5.7) HOT 2
- .Net 5 support
- Upgrading from NES5 to NES8 - what happened to commit dispatchers? HOT 1
- CosmosDB Persistence HOT 1
- Typo on neventstore.org page
- Add net6.0 support
- Bring back intellisense and documentation support
- Refactor IPipelineHook: separate it in multiple interfaces (ISelectionPipelineHook, ICommitPipelineHook)?
- Storage Trade-offs? HOT 2
- Provide a way to invalidate the internal cache of the OptimisticPipelineHook
- Allow upcasting of an event to multiple streams
- Optimize Target Frameworks: netstandard2.0, net462
- NuGet Package: add ReadMe and License
- Quick Start is not that useful and is out of date
- Async Polling Client?
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 neventstore.