RE: Reddit feedback request #29
Replies: 1 comment
-
Hi, Thank you for providing feedback, this is incredibly helpful! I welcome constructive criticism, here are my thoughts and responses to your suggestions:
Once again, thank you for your valuable input! |
Beta Was this translation helpful? Give feedback.
-
Greetings, I decided to make my feedback here instead of comments, so you can ref it in other issues, or PRs
Reddit thread: 🌟 PowerPipe: An open-source .NET library for constructing workflows with a fluent interface
First of all: Great job on making something and putting it out for others to use and critique, it can be a scary thing to do, so kudos for doing it. I going to be a bit nitpicky, so though it might seem negative when I write "you should do X not Y", it's just some random dude's opinion on the internet,, please don't be offended, because the over-all here is that you have done a good job and you are on the right track to do a GREAT job 👍
Quick Suggestions
Directory.Build.props
-file to standardize common things between csproj -filesIPipeline<>
andIPipelineStep<>
shouldn't be buried in a namespace, make them easier to find by placing them in the "root" namespaceWhere's the XML-docs?
XML-docs like these are essential to help you customers use your library correctly:
You need to add
<GenerateDocumentationFile>true</GenerateDocumentationFile>
to your csprojs PropertyGroup for the XML-docs to be compiled into the packageInternalsVisibleTo should be defined in csproj
You have this class AssemblyInfo.cs
you should instead add this to your csproj:
Add an extension method to DI extensions with Action
To make it easier to register something, try to find a way to get this pattern to work for your DI extension methods, would be very nice to just do this:
This might also expose some weaknesses in your DI strategy, because I see some major hurdles to use this comfortably
Steps shouldn't be responsible for calling next step, and they shouldn't be aware of each other
I'm not a fan of how a step calls the next step (from sample):
I've made a pipeline engine or two, and they have been "returns or throws" to decide what is happening next, because if there is a lot of data involved, I want to dispose anything in a class and only keep what I need, but your design holds everything in a hot path, so if I have hundreds of steps all having some data in them, they will eat memory like crazy.
Input/Output data in steps
I have a hard time getting a feel for how you are intending data-transfer between steps, because you aren't allowing some intuitive mechanism for data transfere, only thing I found was doing this, which is a bit jank, if the data has to live through the entire pipeline only to be transported between two steps:
My simple implementation that I made that I based most of my feedback
Beta Was this translation helpful? Give feedback.
All reactions