
.Net Developer with over 7 years of IT experience in .NET Framework Web based application development using Microsoft.NET technologies including ASP.NET, C#, ADO.NET, .NET Core, Azure, Webjobs, Angular REST APIs etc
Sr. Software Engineer
InetbuildSoftware Engineer
InetbuildSoftware Engineer
Council Of Scientific & Industrial Research-CsioIt Recruiter
Spectraforce TechnologiesSoftware Engineer
Styaa.com
Postman

Fiddler

SVN

Visual Studio Code

Visual Studio
Jira

SQL Profiler

Azure Data Studio

VS Code

SSMS

SSMS
I'm Harish. I have done my graduation in a Bachelor of Computer Application in 2016, and it's been 7 years since I'm working in the software development industry. I've worked with various projects, catering to various sectors, during this work experience of mine, which involves e-commerce, SaaS-based platforms, and also banking projects where I worked with SSIS packages to create a data integration for the bank. My recent project is a StackTrak, and it's a SaaS-based application that supports multi-tenancy. It's a product used for catering to low-end workforce specifically targeting the railway industries. I've created solutions specific to different programs with different demands. Over the 7 years, I've worked with C#.NET.NET Core, Azure, and SQL Server. Apart from that, I've followed Agile using Jira with two-week biweekly sprints. Apart from that, I've also been involved in handling teams. I've handled teams of 8 to 12 people, and that's my experience so far.
What's the difference between views, functions, and stored procedures? So, a view is used whenever we need to have certain queries which can be combined by multiple tables, and we want to have that. And functions basically are similar to C# functions in SQL where we have a function which contains parameters or non-parameters, which executes and gives us a written value. And stored procedures are the compiled objects that are used in order to execute a certain operation, by being part of the database. Functions are similar to C# functions that we use, that takes input and gives us a written value. And stored procedures are compiled SQL objects that take some parameters or can be parameterless and execute a certain operation being part of the database and give us the output.
What are the best practices you follow when developing dot net, particularly for a web application? So, we'll start with the segregation of code. I like to say that if I'm talking about just web applications in dot net, I follow an entire application system where I create primarily 3 layers, which can be applied to 3 different projects. One is my UI layer, one is my DAL layer, and one is my BLL layer. And then, additionally, if I'm using an API, then I have an API layer as well, which communicates with my BLL layer, and my BLL layer communicates with my DAL layer, and my UI layer communicates with my API. So, segregation of code in a modular form is one of the first approaches. Then, the second approach is how you write that code. I like using base classes so that you can cater to similar common code. So for the use of common code within the application, I implement it using base classes. Apart from that, if I talk about folder segregation, so each and every single folder is created for a single functionality, and all the necessary files are present within that very functionality. Apart from that, if you just talk about the development part of things, then creating in terms of web forms, creating different user controls in independent user controls is the approach that I follow. And then applying or consuming those user controls into the main application or ASPX page. So, these are the approaches that I follow, like creating a modular application where each and every single application is part of catering a certain specific area. If you're talking about dot net, then I create a lot of classes. I use the dotnet containers, dotnetcorecontainers provided in order to create a singleton, scoped, or transient object in order to handle the dependency injection better. So, dependency injection is one of the major things that I implement in my BLL layer. So, these are the various steps creating a modular application. If you're talking about Angular on top of it, I'll create components. Similarly, in C# dot net, I would create user controls, catering to a specific area.
When would you choose to abstract functionality into reusable pieces of code? Can you explain your approach to coding when and how to abstract code? Yeah. So, first is I would create a base layer if there is a common functionality. And in terms of abstraction, the abstraction is done on an approach if I have to follow one. I'll give you an example. So let's say I have an object, x, and I want to create the SQL side of things as well as the UI side of things. The UI side first, we'll go with SQL. All these stored procedures are created that are associated with the x. Then there are views, and then I will create a BLL layer within a folder, within a singular namespace, containing all the elements of that very x object classes, performing the CRUD operations. Then, there will be my UI layer where I would have different user controls independently consuming these BLL layers or API if I have created. So in that very way, I would create abstraction first on my DAL layer. I can create my DAL layer using Aria.net as well as Entity Framework, or I have also worked with DevExtreme. It is a third-party component provider. Then, I will create an abstraction using namespaces and namespace dependency injection and classes for my BLL layer and for my UI. If I'm talking specifically about a document, then I would create my user controls around that very object. And I will keep them in a singular folder, like, a single folder structure. So that would be my approach to creating an abstraction. And whenever I have to use a user control, I will just simply use the attribute assigned to that very user control into my main page. And that would be my approach for reusability. And whereas if it is for the classes, I can like register that very class using singleton, transient, or scoped, and I can use it using an interface that can give me the object that can inject the object within the class, and thus, it will create a very reusable structure for me where I need not to create an object every single time I'm creating or consuming that very object properties class properties?
When I took the initiative to solve a problem that wasn't necessarily my responsibility, it was a situation where our team was manually creating and maintaining data for T4 templates, which consumed around four hours for a single object. I decided to create a script to generate this data, which reduced the time to approximately one and a half hours, including testing. This was one of the initiatives I took apart from my regular work, and it helped the team by making it easier to create data for the T4 template. The task that previously took four hours was now easily completed in one and a half hours, including testing and CRUD operations generated by the T4 template. Apart from this, there have been many other areas where I've taken the initiative to solve problems not directly related to my job, but I'll have to limit my answer to this specific example. I worked on a script to help with a T4 generation project, which consumes T4 templates to create the basic structure of an entity.
I've always been in a senior position, so usually, when we talk about a setback, it's usually when we're not able to deliver the required functionality on time. And when that happens, it's a responsibility of the one who's at the lead, and you have to take charge. So, how do I cope with those? Keeping oneself accountable is, like, I know that it's the task to be done, and if it's not done, first, the idea in my head is to allocate my time in a way that I can implement that very thing. And within the time, by putting in some extra time if it's feasible. If it's not, my approach to this is to have immediate communication with the client and figure out whether we can improve or increase the time on that very thing so that they have a buffer at their end. Keeping the bounds of it is simply following a Jira, Sprint, having meetings with the team, understanding if someone's stuck somewhere, and figuring out within the team if we can solve and resolve the issue. But as far as accountability is concerned, even if there's someone who hasn't delivered and is part of my team, it's my accountability to take charge and first look into the situation to see if we can do it or not. If it's not feasible within the time frame, then it's my responsibility to communicate with the concerned person on an immediate basis and take responsibility for whatever the outcomes are.
Worked with web APIs and Razor templates. Can you describe how you have used them in building pages? I've worked with Razor pages, but I've been working with Web APIs for around 6 years. How I have been using them? So, Web APIs - I'll give you an example of my current application. Earlier, it was a web form application that consumed Web API. And now we have moved it to Angular and along with the Docker core API. So, how I use Web APIs is simply like them in building web pages. Firstly, Web APIs provide a way to segregate our UI part as well as our backend part. The benefit of consuming it is simply that we can have different UIs catering to different needs without rewriting our logical side of things. For example, in my current application, we have a web application as well as a mobile application that consumes the same API. And I've worked with closed APIs, which were not private APIs. But certainly, we can make it public. The way I consume it is by creating a strong, solid authentication and authorization layer. For this, I have used the bearer token. The bearer token contains claims with all the information about the user roles, and with every request handling that very bearer token in our APIs. As well as Razor templates, I have worked with Razor pages, but not recently. I do not have recent experience working with the Razor templates. In my beginning years, I hadn't worked on it.
Can you explain what delegate delegates and events are in C#? How do you use them in your projects? In what situation would you choose to use an interface over an abstract class in C#? Explain how garbage collection works in C# and what impacts it has on your development. That's a long question. So, delegates are basically function pointers. I've used delegates and events, like, in.NET Core. In.NET Core, we define middleware, and in order to register middleware, we use request delegates in the Program.cs file. And there, I can define my own methods that work between a request and response to an API. I can write my logical code, whether it is to authenticate and authorize a user, or handle errors at a common area. So this is my experience and usage of delegates that I have used. Apart from that, in what situation would you choose an interface over an abstract class? Mostly, I would use an interface. The only difference for me to use an interface over an abstract class would be when I do not have a common code or consumption point. If I have a common code or common logic that I want to use, then I can write and consume an abstract class. That way, I can write that very logic as well. But primarily, I would use interfaces if there is no such requirement, as it helps me to create a layer for dependency injection for the object that I've been using. So, if I do not have a common code to be executed, I would use an interface over an abstract class. Garbage collection is an autonomous function of.NET Core and the.NET Core CLI, and what it does is it autonomously works and removes all the unused objects. It creates three generations: Gen 0, Gen 1, and Gen 2. And depending on the usage of an object, it categorizes or puts them on different generations and removes them accordingly.