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
Example Renderer Abstraction
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);
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
Some suggested semantic changes:
AbstractQrCode-->Renderer***QrCode-->***RendererQRCodeGenerator.CreateQrCode-->QRCode.CreateGetGraphic-->RenderExample Renderer Abstraction
Sample Usage