MongoCola

MongoCola是一个开源的MongoDB管理工具。
由于最初版本的设计失误,所以现在只能在Windows上使用,虽然可以在OSX上使用,但是非常别扭。

契机

MongoCola的第一个版本开始于2011年。那个时候MongoDB还刚刚开始展露头角。
我本人一直比较喜欢文档型数据库,所以对于MongoDB也就特别的关注。
由于长期使用Windows,所以我也是一个UI重度依赖着,希望任何操作都可以通过UI界面来实现。一来可以减少错误发生的概率,二来,可以不用记忆很复杂的操作指令。虽然也有一部分人觉得在命令行中键入一些晦涩的命令很酷炫,但是我还是实用主意,良好的人机界面是我追求的。

.NET

MongoDB是一个开源的数据库,开发一个MongoDB的管理工具,也应该使用一种开源的语言,例如Java。
我从2003年开始使用NET,2010年左右从VB.NET转到C#,那个时候软件开发还是Windows的天下,对于HTML等网页制作完全不懂,所以最后决定使用C#开发一个WinForm的程序。
当然,从2016年的角度来看,如果当时使用Java的话,跨平台就很容易了,再退一步说,如果使用HTML的方式,也就是说,做一个HTTP的服务程序,界面用浏览器打开,也是一个跨平台的方案。
(当然这方面的尝试也有过)


但是由于那个时候也没有Angular这样的解决方案,所以一直没有继续下去。

沟通

这个工具底层使用的是官方的驱动。但是驱动程序总有一些自己想要却没有的功能。如何和官方沟通则成为了一个课题。
本人英语属于那种书面够用的水平,使用简单的英语配上代码,截图,可以将问题描述清楚的水平。
所以发现问题也会及时和官方沟通,发现过一些只有在中文环境下才会发生的特有的问题

Some Command don't support Chinese

MaxDocuments is Int64

歪果人也蛮有趣的,祝贺中国年。

以后也陆续陆续提了一些建议和意见,总体上说,是对于沟通能力的一次锻炼。

驱动程序

MongoDB的C#驱动,期间进行过一次重大的改版。
几乎所有的同步操作都被异步所取代了。注意,是取代了,取代了,取代了。
虽然说,通过Web的操作,应该都采用异步操作,但是,官方的做法不是新增异步的操作方法的同时,保留旧的同步方法。
这样做意味着,所有的牵涉到DB操作的代码,都必须重写
在重写的过程中,虽然很痛苦,但是对于async,await关键字有了更加深刻的理解,也算是学习吧。
当然,官方驱动现在采用了折衷的方式,旧的Legacy驱动和新的驱动是共存的。你可以同时将新旧两个版本的驱动引入程序中。

重构

这样的项目,没有重构是不可能的。大大小小的重构不知道进行了多少次了。
一开始的程序,界面,数据库,Helper方法都是在一个工程中的,只是使用文件夹区分开来。
代码量不大的时候,也没有觉得不妥。
随着代码量上升,插件,外部工具等的需求,原来的强耦合的方式渐渐显示出不便了。
然后,花了2周时间进行了一次不彻底的解耦(有些代码暂时不敢动)。
界面和功能分离。
窗体和控件分离。
Mongo核心代码和Helper类分离。
功能窗体和主窗体分离。
Tab页的管理做成了一个扩展性高的模块。
新的C#6的语法导入。

感谢

一个开源软件可以走到现在,两个原因:

  1. 有人在使用,的确解决了一些人的痛点。
    后来我陆陆续续完成了一些个人作品,大都使用了Mongo作为数据库解决方案
    所以,这个工具也发挥了很大的作用,我才有兴趣去长期维护它。因为这个工具成为了其他项目的一部分了。

  2. 感谢博客园上的各位的支持
    在园里也发布了一些介绍Mongo的文章,感谢大家的支持和鼓励。

3.最后感谢贡献代码的人们,你们是这个项目的源泉和动力。
一开始的时候,这个项目还有人关注时间久了,加上Mongo在国内不温不火,自然也没有人关注了。
不过最后还是感谢两位朋友,最近贡献的源代码。

以下 更新来自于 QiQi https://github.com/1354092549

优化聚合功能

对齐组件,更美观
优化聚合管道(Aggregate)相关功能,和Mongodb官方统一,使用名词stage
Add Stage(应用第2条前的Add Aggregate)支持提供数组,用于一次添加多个stage
优化中文语言包
Ver 1.5(Beta2) 2016/02/17 @ Shanghai China

感谢 张鹏 zp11qm12#hotmail.com 对于1,2,3点的贡献

修复了collection中数据删除不掉的bug(id应强转为ObjectId)
修改了ctlJsEditor界面,现可直接执行已经保存的javascript代码(我的团队需要这个功能)
添加了复制数据库的功能(其实是复制表,目的是为了同步javascript代码)

一晃这个项目已经5年了(2011-2016),最近有200个Star了。
对于一个非主流的数据库管理程序来说,已经是一个不错的成绩了。
其间也没有做过宣传,200个Star都应该是Mongo的粉丝。MongoDB有它的局限和长处。
下面这篇博文也介绍了Mongo的使用经验。
虽然是Mongo爱好者,但是我还是要说,并非所有项目都适合用MongoDB。
MongoDB的领域是分布式,复杂数据结构。如果你的项目里面,都是新手,还是老老实实用MySql比较好。
http://www.codesnippet.info/Article/Index?ArticleId=00000005

最后是广告时间:
http://www.codesnippet.info/ 已经开张,代码已经开源。
CodeSnippet.info 开源说明 和 环境搭建
http://codesnippet.info/Article/Index?ArticleId=00000009
欢迎大家投稿以及加入网站的开发。谢谢观赏。

本文已经同步到
http://codesnippet.info/Article/Index?ArticleId=00000016

写在MongoCola在Github上获得200个Star之后的更多相关文章

  1. Github上Laravel开源排行榜Star数61-90名

    Github上Laravel开源排行榜Star数61-90名,罗列所有 Laravel 开源扩展包,含 Github Star 数量,下载数量和项目简介.默认排序是按Star数量从多到少来排 61.c ...

  2. Github上Laravel开源排行榜Star数31-60名

    Github上Laravel开源排行榜Star数31-60名,罗列所有 Laravel 开源扩展包,含 Github Star 数量,下载数量和项目简介.默认排序是按Star数量从多到少来排 31.c ...

  3. Github上的watch、star和fork分别是什么意思

    Github上的watch.star和fork分别是什么意思呢? 1.watch可以用来设置接收邮件提醒 2.如果想持续关注该项目就star一下 3.如果想将项目拷贝一份到自己的账号下就fork fo ...

  4. Github上Laravel开源排行榜Star数前30名

    Github上Laravel开源排行榜前30名,罗列所有 Laravel 开源扩展包,含 Github Star 数量,下载数量和项目简介.默认排序是按Star数量从多到少来排 1.cachethq/ ...

  5. 每日一练(写不出心得体会了!毕竟哪有那么多心得好写。然后看github上有很多不错的题目。分享一下!)

    第一题: 问题描述:写一个reverseWords函数 调用方式:console.log(reverseWords('Hello World')); 期望输出:World Hello 第二题: 问题描 ...

  6. 看github上有18万star的第一开源项目如何教你学前端编程的

    作为 Github | star 第一开源项目,已经超过18万 star:比之前最火的bootstrap的10万star还要多出8w,freeCodeCamp 越来越受关注,建站两年时间不到已经近40 ...

  7. github上所有大于800 star OC框架

    https://github.com/XCGit/awesome-objc-frameworks#awesome-objc-frameworks awesome-objc-frameworks ID ...

  8. Github上的Watch和 Star的区别

    Github 推出了新的 Notification 系统,更改了原有的 Watch 机制,为代码库增加了 Star 操作.Notification 将接收 Watching 代码库的动态,包括:* I ...

  9. 关于如何在github上创建团队开发环境

    今天想写个如何在github上创建团队开发环境的博客.送给那些还不知道如何在github上创建团队开发环境的开发人员. 1.首先,当然你要有个github的账号.具体怎么注册我这里就不说了.可以上gi ...

随机推荐

  1. Remote Desktop Connection Manager (RDCMan)

    当前最新版本是 v2.7. 通过这款软件,我们便可以轻松的管理和访问数个RDP.左边的列表中我们可以创建总的分区列表(即 RDCMan Group),该列表保存采用的是RDG扩展名,使用时通过&quo ...

  2. [Asp.net 开发系列之SignalR篇]专题三:使用SignalR实现聊天室的功能

    一.引言 在前一篇文章中,我向大家介绍了如何实现实现端对端聊天的功能的,在这一篇文章中将像大家如何使用SignalR实现群聊这样的功能. 二.实现思路 要想实现群聊的功能,首先我们需要创建一个房间,然 ...

  3. UWP开发随笔——UWP新控件!AutoSuggestBox!

    摘要 要开发一款优秀的application,控件肯定是必不可少的,uwp就为开发者提供了各种各样的系统控件,AutoSuggestBox就是uwp极具特色的控件之一,也是相对于之前win8.1的ua ...

  4. 前端自动化测试工具doh学习总结(二)

    一.robot简介 robot是dojo框架中用来进行前端自动化测试的工具,doh主要目的在于单元测试,而robot可以用来模仿用户操作来测试UI.总所周知,Selenium也是一款比较流行的前端自动 ...

  5. Asp.net下使用HttpModule模拟Filter,实现权限控制

    在asp.net中,我们为了防止用户直接从Url中访问指定的页面而绕过登录验证,需要给每个页面加上验证,或者是在模板页中加上验证.如果说项目比较大的话,添加验证是一件令人抓狂的事情,本次,我就跟大家分 ...

  6. [安卓] 17、一个简单的例子学安卓侧滑设计——用开源slidingmenu

    效果如下: 下面是工程结构: 整个工程包括android-v7.SlidingMenu-lib和主工程SlidingMenuTest部分 其中前两个作为lib,后一个为主工程 主工程包含两个lib工程 ...

  7. UStore-自定义JDF文件格式输出

    系统默认的JDF输出不能满足我们的需求,往往不同的供应商输出不同要求的JDF格式.这里我们开始介绍ustore的自定义JDF输出 1.先屏蔽掉默认的JDF格式输出 我们进入Tigger来设置ustro ...

  8. 我心中的核心组件~MSMQ与Redis队列

    回到目录 这个文章其实是我心中的核心组件的第七回,确实在时间上有些滞后了,但内容并不滞后!本文MSMQ只是个引题,我确实不太想说它,它是微软自己集成的一套消息队列,寄宿在Window服务里,稳定性十在 ...

  9. bower使用记录

    每次做项目的时候都不依赖某一个库来开发,每次需要某一个库的时候都是百度进入库官网再找到下载的库,经常会因为官网的改版更新而在里面绕半天找不到想要的版本号,当然直接去github,CDN 都可以找到需要 ...

  10. Atitit.数据库存储引擎的原理与attilax 总结

    Atitit.数据库存储引擎的原理与attilax 总结 1. 存储引擎是什么1 2. 其它数据库系统(包括大多数商业选择)仅支持一种类型的数据存储2 3. 表的存储有三个文件:结构+数据+索引2 4 ...