QRCoder icon indicating copy to clipboard operation
QRCoder copied to clipboard

[WIP/QRCoder2] Consider Updated Abstractions

Open csturm83 opened this issue 8 months ago • 12 comments

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);

csturm83 avatar May 30 '24 03:05 csturm83