Giter VIP home page Giter VIP logo

farseer.net's Introduction

Farseer.net是什么?

针对.net core 平台下的一套开发标准制定。

通过该标准,我们会为您选型出目前最为流行的常用组件,并按我们的标准(模块化)来提供如何使用这些组件。

我们选用Castle.Windsor作为我们的IOC框架,并制定使用该框架的一些规则。

Farseer.Net会告诉你以什么样的方式实现优雅的代码。

我们不造轮子,我们只是这些优秀的开源组件搬运工。

我们所有组件的使用标准,均无偿开源在GitHub上,并提供Nuget下载

使用Rabbit组件的示例:

Program.cs

[Rabbit]
class Program
{
    static void Main(string[] args)
    {
        // 项目启动时初始化
        FarseerApplication.Run<StartupModule>().Initialize();
        Thread.Sleep(-1);
    }
}

StartupModule.cs

/// <summary> 启动模块 </summary>
[DependsOn(typeof(RabbitModule))]
public class StartupModule : FarseerModule
{
    public override void PreInitialize() { }

    public override void PostInitialize() { }
}

TestConsumer.cs

/// <summary> 消费客户端 </summary>
[Consumer(Enable = false, Name = "default", ExchangeName = "test", QueueName = "test", ExchangeType = eumExchangeType.fanout, DlxExchangeName = "DeadLetter")]
public class TestConsumer : IListenerMessage
{
    public bool Consumer(string message, object sender, BasicDeliverEventArgs ea)
    {
        System.Console.WriteLine(ea.ConsumerTag + "接收到信息为:" + message);
        return true;
    }

    public bool FailureHandling(string message, object sender, BasicDeliverEventArgs ea) => throw new NotImplementedException();
}

以上三个class,就实现了rabbit的消费。 Program.cs 有个特性[Rabbit],用来告诉Rabbit模块,是否启用消费端,开启后,会扫描所有消费端进行初始化并异步消费。

StartupModule.cs 是启动模块。[DependsOn]特性会告诉Farseer.Net,在项目启动时需要依赖哪些组件(比如上面的:RabbitModule模块,它也是继承FarseerModule)。 同时在模块中,会有初始化的方法。可以写入你希望初始化时执行的配置

TestConsumer.cs 是实际的消费执行端,通过[Consumer]特性,会知道当前要连接哪一个Rabbit,属于哪个队列、交换器。

并且在启动消费的时候,如果交换器、队列不存在时,会执行创建操作。

我们再来看另外的例子:数据库ORM操作:

TaskPO.cs

/// <summary> 数据库实体 </summary>
public class TaskPO
{
    /// <summary> 主键 </summary>
    [Field(Name = "id",IsPrimaryKey = true)]
    public int? Id { get; set; }
    
    /// <summary> 任务的标题 </summary>
    [Field(Name = "caption")]
    public string Caption { get; set; }
}

MetaInfoContext.cs

/// <summary> 数据库上下文 </summary>
public class MetaInfoContext : DbContext<MetaInfoContext>
{
    public MetaInfoContext() : base("default")
    {
    }
    
    public TableSet<TaskPO>   Task   { get; set; }

    protected override void CreateModelInit(Dictionary<string, SetDataMap> map)
    {
        // 设定数据库表名称
        map["Task"].SetName("task");
    }
}

ITaskAgent.cs

public interface ITaskAgent : ITransientDependency
{
    List<TaskPO> ToList();
    TaskPO ToEntity(int id);
}

TaskAgent.cs

/// <summary> 任务数据库层 </summary>
public class TaskAgent : ITaskAgent
{
    /// <summary> 获取所有任务列表 </summary>
    public List<TaskPO> ToList() => MetaInfoContext.Data.Task.ToList();

    /// <summary> 获取任务信息 </summary>
    public TaskPO ToEntity(int id) => MetaInfoContext.Data.Task.Where(o => o.Id == id).ToEntity();
}

ITaskList.cs

public interface ITaskList: ITransientDependency
{
    List<TaskVO> ToList();
    TaskVO ToInfo(int id);
}

TaskServer.cs

public class TaskServer : ITaskServer
{
    public ITaskAgent TaskAgent { get; set; }

    /// <summary> 获取任务信息 </summary>
    public TaskVO ToInfo(int id) => TaskAgent.ToEntity(id).Map<TaskVO>();
    
    /// <summary> 获取全部任务列表 </summary>
    public List<TaskVO> ToList() => TaskAgent.ToList().Map<TaskVO>();
}

可以看到,TaskServer使用了Ioc属性注入,一切很自然。

在Mvc层调用TaskServer,同样是用ITaskServer接口通过Ioc来调用。

上面用到了数据库上下文的概念,并支持工作单元模式。在我们需要操作数据库方面是极为轻巧、简单的。

关与数据库操作、模块化理念的实际使用,可以参考我另外一个开源项目:分布式调度平台,地址:GitHub

当然,这里需要依赖DataModule模块: StartupModule.cs

/// <summary> 启动模块 </summary>
[DependsOn(typeof(DataModule),typeof(RabbitModule))]
public class StartupModule : FarseerModule
{
    public override void PreInitialize() { }

    public override void PostInitialize() { }
}

Farseer.net有哪些功能?

  • Farseer.Net.Data:数据库ORM
    • 支持:Sqlserver/Oledb(Access/Execl)/Sqlite/MySql/Oracle 数据库。
  • Farseer.Net.AspNetCore
    • 基于asp.net core的一些封装
  • Farseer.Net.Cache
    • 基于本地缓存MemoryCache的模块化封装
  • Farseer.Net.Cache.Redis
    • 基于StackExchange.Redis的模块化封装
  • Farseer.Net.Configuration(计划废除)
    • 本地json配置解析
  • Farseer.Net.Core
    • 基础依赖
  • Farseer.Net.ElasticSearch
    • 基于NETS的模块化封装
  • Farseer.Net.Job
    • 基于FSS分布式调度平台的客户端
  • Farseer.Net.Log
    • 基于NLog的模块化封装
  • Farseer.Net.Mapper
    • 基于AutoMapper的模块化封装
  • Farseer.Net.MongoDB
    • 基于MongoDB.Driver的模块化封装
  • Farseer.Net.MQ
    • MQ的基类
  • Farseer.Net.MQ.Kafka
    • 基于Confluent.Kafka的模块化封装
  • Farseer.Net.MQ.Rabbit
    • 基于RabbitMQ.Client的模块化封装
  • Farseer.Net.MQ.RocketMQ
    • 基于阿里云ONSClient4CPP的模块化封装
  • Farseer.Net.Utils
    • 常用工具扩展封装
  • Farseer.Net.Web.Mvc

有问题反馈

在使用中有任何问题,欢迎反馈给我,可以用以下联系方式跟我交流

farseer.net's People

Contributors

steden avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.