QRCoder
QRCoder copied to clipboard
[WIP/QRCoder2] Consider Updated Abstractions
QRCoder v2 provides a unique opportunity to streamline and clean up some of the rough edges of public API that has evolved and accumulated over the years.
Potential Goals of an Updated API
- Intuitive
- Discoverable
- Consistent
- Clear (succinct) semantics
- Extensibility
- Maximize code reuse
- 'Pit of success'
Some suggested semantic changes:
-
AbstractQrCode
-->Renderer
-
***QrCode
-->***Renderer
-
QRCodeGenerator.CreateQrCode
-->QRCode.Create
-
GetGraphic
-->Render
Sample Usage
// 'traditional' three-step rendering
QRCodeData qrData = QRCode.Create(payload, qrSettings);
TestRenderer renderer = new TestRenderer(qrData);
byte[] renderedt3 = renderer.Render(renderSettings);
// fluent three-step rendering
byte[] rendered3 = QRCode.Create(payload, qrSettings)
.RenderAs<TestRenderer>()
.Render(renderSettings);
// fluent two-step rendering
byte[] rendered2 = TestRenderer.Create(payload, qrSettings)
.Render(renderSettings);
// one-shot rendering
byte[] rendered1 = TestRenderer.Render(payload, qrSettings, renderSettings);