Elements are just “chunks” of bigger code, whatever you call it in your preferred framework: elements/partials/includes.
By glancing a “concrete/views” folder it seems it contains files that are mostly responses from ajax (for example dialog boxes). They are not just only “parts” of some php file/view but whole “response” since the difference.
In your block view you can use:
<?php $this->inc('elements/your_file.php'); ?>
and if you want to pass variable:
<?php $this->inc('elements/your_file.php', ['testVariable' => $testVariable]); ?>
Code above is just kind of a wrapper for good old php include:
<?php include('elements/your_file.php'); ?>
Also you don’t have to name folder inside block “elements” (I think it’s good naming convention, but it has nothing to do with “elements” folder outside your block).
“elements” folder comes into play when you are using:
because it will search for file inside “elements” folder in various places (concrete/elements, application/elements, theme/elements, packages/your_package/elements). It will not search inside your block folders though.
For files in “views” folder, you would usually want to register custom route first (for example in bootstrap/app.php) and render your view in controller. This way you can display it in browser by typing url or use in ajax request.
Personally I would only put something in “application/elements” if it was used across many places or if it was some kind of dashboard functionality.
For example I have used “application/views” folder when making template for auto-generating pdf.
But most of the time I like to keep things in one place, be it in block, package or theme folder.