Options for HTML technologies in an application designed for managing enterprise metadata

Challenge

We are facing the decision of determining which technologies to adopt as we transition from a rich client Silverlight application to an HTML-based client that can accommodate a metadata driven approach.

Situation

  • Our enterprise has been using a Silverlight application for over 6 years, with a two-layer architecture where the Silverlight rich client communicates directly with the server backend. A significant portion of our business logic is executed within the Silverlight framework.
  • Historically, we have predominantly utilized Microsoft technologies.
  • Our team has limited experience with modern web development.
  • We are overwhelmed by the various technologies available for building contemporary web applications.
  • We have explored options like Angular 1 and 2, Kendo UI, among others.
  • Our entire system operates on metadata-driven principles, encompassing schema, business logic, views, and more.

Critical Criteria

  1. The solution must be metadata driven, allowing for dynamic creation and utilization of views and data models at runtime rather than compile time. Many JavaScript libraries lack support for this feature, assuming pre-defined views and data models.
  2. We require a dynamic and responsive client capable of triggering server interactions based on changes in field values, enabling real-time updates, styling modifications, dialog prompts, and DOM manipulations.
  3. If feasible, we seek an easy migration path from Silverlight, recognizing the challenges posed by our specific requirements.
  4. A long-term commitment is essential, as we aim to invest in stable and reliable technologies for at least five years, avoiding volatility and risk.<

Conclusion

We are seeking advice on selecting appropriate technologies and development methodologies that align with our unique needs and constraints.

Answer №1

There are several approaches you can take when considering this.

To begin with, there is the concept of Depth vs Breadth. If your goal is to have in-depth experiences while also reaching a broad audience, you may find yourself chasing after the Technical Unicorn (which has led many people astray in the past). It's important to understand that each choice comes with its own set of challenges, but what matters most is where you can attract users and how you can influence them. While some may prioritize breadth for fear of missing out on mobile coverage, the development costs and actual usage could prove otherwise.

Once you've made a decision on this, it will help guide you in choosing the appropriate technology.

For a broader reach: Web or Xamarin seem like suitable options. Xamarin, however, requires proficiency in generating dynamic UIs, especially as Xamarin Forms moves towards XAML implementation. Despite the shift away from Silverlight/WPF XAML, Xamarin remains a solid choice with its unique features.

If you're coming from a Silverlight background, a web framework like AngularJS might be more familiar to you. Its MVVM binding style aligns well with Microsoft technologies, and you'll benefit from a strong community support system.

For a deeper focus: WPF is a reliable option worth considering. As long as Windows XP to Windows 10 remain in use, WPF will continue to serve its purpose. While there may not be significant additions to its codebase in the future, the existing infrastructure offers stability and compatibility across different Windows versions.

In retrospect of the Silverlight/WPF era, we underestimated the enduring appeal of WPF. Despite being deemed "old tech" by Microsoft, WPF has shown steady growth and garnered a dedicated community following. This suggests that choosing WPF could lead to better support and resources compared to other technologies.

While the new Microsoft SDKs are enticing, keep in mind that anything below Windows 8 may limit your desktop application reach.

I hope this helps clarify things for you.

Similar questions

If you have not found the answer to your question or you are interested in this topic, then look at other similar questions below or use the search

First render does not define useEffect

Why am I experiencing an issue here? Whenever I attempt to retrieve data from my API, it initially returns undefined during the first render, but subsequent renders work correctly. const [data, setData] = useState([]) useEffect(() => { const fe ...

An effective method for targeting a specific button within a CSS file

I have multiple button tags in my code, but I need to style a specific one using CSS. How can I target this particular button and apply styles only to it while leaving the others unchanged? Do I need to assign the button to a variable and reference that va ...

Using async and await inside a setTimeout function within a forEach loop

Currently, I am facing a challenge with scheduling background jobs in Node.js. I need each job to run only after the previous one has finished. Below is the code snippet inside a function: jobArray.forEach((item, i) => { setTimeout(async () => { ...

Should I refrain from storing user files on my server?

Greetings! I am currently working on an Express js + React js application and using MySQL for database management. I have successfully stored user information like email, hashed passwords, and user IDs in the database. However, now I want to create ...

Using Javascript to set up a callback that alerts when a script file is done loading with the attributes "async" and "defer"

My app is loading the platform.js file asynchronously with the attributes of async defer. <script src="https://apis.google.com/js/platform.js?onload=onLoadCallback" async defer> </script> I am looking for a callback function that will alert m ...

Submitting form data using Vue and PHPMailer

I've been encountering an issue with submitting a contact form from a page. After submitting the form, nothing seems to happen. My tech stack includes Vue, Axios, and PHPMailer for handling this functionality. Upon inspecting the network tab, it appea ...

Node.js tutorial: Building routes with regex and implementing redirects

Can anyone provide guidance on how to utilize route and redirect URLs with parameters in Node.js using Express? If the URL is xyz/?s=test, it should redirect to indexRouter. If the URL is xyz/, it should also redirect to indexRouter. I'm facing issu ...

Enhanced Bootstrap Carousel with White Background Transitions

Having trouble articulating my issue, so here's a video that should clarify: https://example.com/video I'm using a bootstrap carousel template for a full-width slider. Despite my efforts to remove the white-space transitions, they persist. Am I ...

Discovering the art of line breaks

Imagine I have a random block of text displayed in a single line, like this: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Due to various reasons such as width settings or text-zoom, the text may display as two or more lines on the viewer&apos ...

Acquire the Information from a Textarea That Has Been Edited by the User

My challenge lies in taking user-entered text from a content editable textarea and sending it via POST request, but the fields edited by the user are returning with an empty textContent. The code snippet below shows that each .entryRow (obj) contains multi ...

Switching the mouse cursor when the mousedown event occurs

I'm trying to implement a feature where holding down the mouse will change the cursor to an image, and when releasing the mouse it should revert back to its default. However, the code I have isn't working properly - you have to right click then l ...

Display open time slots in increments of 15 minutes on Fullcalendar

Currently, I am utilizing the fullcalendar plugin with the 'agendaweek' view. My goal is to showcase the available time slots as clickable and highlight the busy ones with a red background. Handling the highlighting of busy slots is not an issue ...

What is the process for integrating a gltf model into Aframe & AR.js with an alpha channel?

--Latest Update-- I've included this code and it appears to have made a difference. The glass is now clear, but still quite dark. Note: I'm new to WebAR (and coding in general).... but I've spent days researching online to solve this issue. ...

What is the best way to store images in a directory using JavaScript and ASP.NET?

How can I upload and save an image in a folder using ASP.NET, then call and display it? Is it possible to achieve this using AJAX, jQuery, or JavaScript with Web Method? <asp:FileUpload CssClass="image" ID="fileUpload" runat="server" /> I currently ...

What steps should I take in order to ensure that NPM commands run smoothly within Eclipse?

I have a functional workflow that I'm looking to enhance. Currently, I am developing a JavaScript library and conducting smoke tests on the code by using webpack to bundle the library and save it to a file that can be included in an HTML file for test ...

Is jquery.validate showing errors more than once?

For my testing program, I utilize the jquery.validate plugin to validate user input fields. Here is how it's set up: <script src="js/jquery-1.12.4.min.js"></script> <script src="js/jquery-form-3.51.min.js"></script> <script ...

Customizing App (directory) elements in next.js 13

Imagine having this directory organization: https://i.stack.imgur.com/Hd5gu.png Is there a method for loading the component from the custom folder instead of the default one in the app folder? In case the custom folder does not have that component, can t ...

The error message "Type 'string | number' is not assignable to type 'number'" indicates a type mismatch in the code, where a value can be either

I encountered an error code while working with AngularJS to create a countdown timer. Can someone please assist me? //Rounding the remainders obtained above to the nearest whole number intervalinsecond = (intervalinsecond < 10) ? "0" + intervalinseco ...

Npm publish seems to be stuck without generating any output

I'm having trouble trying to publish a package that I created. The files can be found at this Github Repo. When I run the command npm publish, it just seems to hang without any errors or output. I've attempted logging in using npm login and npm a ...

The absence of FormData.entries in submit is a limitation of the Vue framework

I recently created a Vue-App that consists of a simple form with just one <input name"surname"> and a <button type="submit">. The use case is to input "myname" and submit the form. However, when I initialize new FormData( ...