moparo
Reel Rookie

What software design pattern you use in Roku app development?

Hi, what software design pattern you use when you develop Roku applications, to have the best results?

Tags (1)
0 Kudos
4 REPLIES 4
philanderson777
Roku Guru

Re: What software design pattern you use in Roku app development?

It's a good question, because Roku uses 'content nodes' to obtain data which is normally done as a background task you normally have

<component />

 

m.component = m.top.findNode("component")

m.component.contentNode = .... use background task to obtain data and fill TV content

m.component.visible = true

 

.. and that's about it ...

 

There's not much 2-way data binding etc in Roku because nearly all the data is read-once and display data, there is not much dynamic data to speak of.

 

Hope that helps!

 

 

0 Kudos
moparo
Reel Rookie

Re: What software design pattern you use in Roku app development?

Thank you for your answer, it is very helpful. But in the case of background task, which is the better way to call, to send data between components?. If a Factory Method or Singleton design pattern maybe (or others) fits in Roku's development process, to send and receive data between components, and how it can be implemented in BrightScript/Scenegraph.

 

0 Kudos
philanderson777
Roku Guru

Re: What software design pattern you use in Roku app development?

Hi 

 

We normally use event-driven pattern here

 

<ParentComponent>

     <ChildComponent />

</ParentComponent>

 

in Parent.brs

.m.childComponent = m.top.findNode("ChildComponent")

m.childComponent.observeField("watchThisField","runThisCallbackOnEvent")

 

in Child.xml

<component>

  <interface>

     <field id="watchThisField" type="string/boolean/etc" alwaysNotify="true" />

 

in Child.brs

m.top.watchThisField = "some data"/true/etc         // triggers the event

 

this will notify the parent of the event and the data can be read in the parent as

 

sub runThisCallbackOnEvent(message as Object)

   data = message.getData()

    // use data

end sub

 

 

hope that helps 

0 Kudos
philanderson777
Roku Guru

Re: What software design pattern you use in Roku app development?

If you are using a background task to fetch data you can follow this roku sample

 

https://developer.roku.com/en-gb/docs/references/scenegraph/control-nodes/task.md

 

you can still watch for the event as before in the main component, which can be triggered once the background task has returned the data

 

TaskComponent.xml

<component name="TaskComponent" extends="Task">

   <interface>

      <field id="data" type="assocArray" alwaysNotify="true">

 

TaskComponent.brs

   sub getData()

      // get data from api

      m.top.data = data        // triggers event

    end sub

 

 

Listen for event

MainComponent.brs

m.backgroundTask = m.top.findNode("TaskComponent")

m.backgroundTask.observeField("data","onDataReceived")

 

sub onDataReceived(message as Object)

    data = message.getData()

    // use data

 

 

 

In this way you have one background task fetching the data and then thread dies.

Or you can create background task event loop which is always running, to fetch data on demand.

 

0 Kudos
Community is Temporarily in Read-Only Mode!

We’re upgrading Roku Community to bring you a faster, more mobile-friendly experience. You may notice limited functionality or read-only access during this time. You will not be able to log in or post new comments or kudos during this time. Read more here.

Planned Downtime:
Community will be unavailable for up to 24–48 hours during the upgrade window during the week of May 12 and you may notice reduced functionality. In the meantime, for additional assistance, visit our Support Site.

Thanks for your patience — we’re excited to share what’s next!